opt c-,d-,l-,o1+,o2+,p-,x- * --------------------------------------------------------------------------- * ----- NewBoot V1.1 Install ----- * ----- ~~~~~~~~~~~~~~~~~~~~~~~~~~ ----- * ----- © by André Wichmann of CLUSTER ----- * ----- Aragorn 29/09/1990 - 30/09/1990. ----- * --------------------------------------------------------------------------- * * NTSC version * incdir ram:include/ include exec/exec_lib.i include exec/execbase.i include exec/memory.i include intuition/intuition_lib.i include graphics/graphics_lib.i include graphics/rastport.i SECTION "",CODE_C _Main lea BootBlock(pc),a0 calc checksum move.w #$ff,d0 moveq #0,d1 move.l a0,a2 Loop add.l (a0)+,d1 bcc.s Carry addq.l #1,d1 Carry dbra d0,Loop not.l d1 add.l 4(a2),d1 bcc.s Carry2 addq.l #1,d1 Carry2 move.l d1,4(a2) sub.l a1,a1 CALLEXEC FindTask move.l d0,ReplyPort+16 lea ReplyPort(pc),a1 CALLEXEC AddPort lea DiskIO(pc),a1 move.l #ReplyPort,14(a1) move.l #0,d0 clr.l d1 lea Trdname(pc),a0 CALLEXEC OpenDevice lea DiskIO(pc),a1 move.w #3,28(a1) move.l #BootBlock,40(a1) move.l #2*512,36(a1) move.l #0*512,44(a1) CALLEXEC DoIO move.w #4,28(a1) CALLEXEC DoIO move.w #9,28(a1) move.l #0,36(a1) CALLEXEC DoIO lea ReplyPort(pc),a1 CALLEXEC RemPort lea DiskIO(pc),a1 CALLEXEC CloseDevice moveq #0,d0 rts Trdname dc.b "trackdisk.device",0 even DiskIO ds.l 20 ReplyPort ds.l 8 opt p+ tf_BaseLine equ 26 tf_CharData equ 34 tf_Modulo equ 38 * Dos data BootBlock dc.b "DOS",0 DOS ID dc.l $0 Checksum dc.l $370 Ptr on rootblock * DOS stuff lea dosname(pc),a1 DOS Startup move.l 4.w,a6 jsr -96(a6) FindResident() move.l d0,a0 move.l 22(a0),a0 clr.l d0 and return * Own code movem.l d0-d7/a0-a6,-(sp) save regs btst #10,$dff016 right mb ? bne.s DoBB move.w #$044,$dff180 set color move.w #$044,$dff182 move.w #$044,$dff184 move.w #$044,$dff186 bra NoBB DoBB move.w #$440,$dff180 set color move.w #$440,$dff182 move.w #$440,$dff184 move.w #$440,$dff186 * Clear reset move.l 4.w,a6 get SysBase clr.l CoolCapture(a6) clear Reset-vectors clr.l ColdCapture(a6) clr.l KickMemPtr(a6) clr.l KickTagPtr(a6) * Install New OpenWindow move.l #NewOpenEnd-NewOpen,d0 Get mem clr.l d1 jsr _LVOAllocMem(a6) move.l d0,a5 lea Intname(pc),a1 open int-lib clr.l d0 jsr _LVOOpenLibrary(a6) move.l d0,a0 lea OldOpen(pc),a1 move.l _LVOOpenWindow+2(a0),(a1) save old OpenWindow ptr move.l a5,_LVOOpenWindow+2(a0) set new OpenWindow ptr lea NewOpen(pc),a0 copy new routine move.l #NewOpenEnd-NewOpen-1,d0 CopyNew move.b (a0)+,(a5)+ dbra d0,CopyNew * Kill Fastmem optionally btst #6,$bfe001 bne.s NoAllocFast AllocFast move.l #32768,d7 Start with 60000 bytes AllocLoop_1 move.l d7,d0 Alloc mem move.l #MEMF_FAST,d1 jsr _LVOAllocMem(a6) tst.l d0 bne.s AllocLoop_1 lsr.l #1,d7 half size tst.l d7 bne.s AllocLoop_1 move.w #$404,$dff180 set color move.w #$404,$dff182 move.w #$404,$dff184 move.w #$404,$dff186 NoAllocFast * DOS stuff NoBB movem.l (sp)+,d0-d7/a0-a6 rts * New _LVOOpenWindow routine NewOpen lea Windowtitle(pc),a1 set new title move.l a1,$1a(a0) move.l OldOpen(pc),_LVOOpenWindow+2(a6) jsr _LVOOpenWindow(a6) movem.l d0-d7/a0-a6,-(sp) move.l 4.w,a6 jsr _LVOForbid(a6) lea Topazname(pc),a0 set ptr lea Topazstruct(pc),a1 move.l a0,(a1) lea Gfxname(pc),a1 open gfx-lib clr.l d0 jsr _LVOOpenLibrary(a6) move.l d0,a5 move.l #TurboEnd-TurboText+8*256,d0 move.l #MEMF_CLEAR!MEMF_PUBLIC,d1 jsr _LVOAllocMem(a6) lea TTBase(pc),a0 move.l d0,(a0) lea OldText+2(pc),a0 move.l _LVOText+2(a5),(a0) move.l TTBase(pc),_LVOText+2(a5) move.l #92*8,d0 Mem for text-plane (blit) move.l #MEMF_CLEAR!MEMF_CHIP!MEMF_PUBLIC,d1 jsr _LVOAllocMem(a6) lea PlaneMem(pc),a0 move.l d0,(a0) move.l a5,a6 lea TopazStruct(pc),a0 jsr _LVOOpenFont(a6) lea TT_Font(pc),a0 move.l d0,(a0) move.l d0,a0 lea Basel_store+2(pc),a1 move.w tf_BaseLine(a0),(a1) move.l TTBase(pc),a2 add.l #CharMem-TurboText,a2 moveq #31,d0 Create_0to31 move.b #%00010000,(a2)+ move.b #%00111000,(a2)+ move.b #%00111000,(a2)+ move.b #%01101100,(a2)+ move.b #%01101100,(a2)+ move.b #%11111110,(a2)+ move.b #%11111110,(a2)+ move.b #%00000000,(a2)+ dbra d0,Create_0to31 move.l TT_Font(pc),a5 clr.l d4 move.w tf_Modulo(a5),d4 move.l tf_CharData(a5),a5 moveq #95,d1 Convert_Topaz move.l a5,a4 moveq #7,d0 Convert_Char move.b (a4),(a2)+ add.l d4,a4 dbra d0,Convert_Char addq.l #1,a5 dbra d1,Convert_Topaz moveq #31,d0 Create_128to159 move.b #%00010000,(a2)+ move.b #%00111000,(a2)+ move.b #%01101100,(a2)+ move.b #%11000110,(a2)+ move.b #%01101100,(a2)+ move.b #%00111000,(a2)+ move.b #%00010000,(a2)+ move.b #%00000000,(a2)+ dbra d0,Create_128to159 moveq #95,d1 Convert_Topaz2 move.l a5,a4 moveq #7,d0 Convert_Char2 move.b (a4),(a2)+ add.l d4,a4 dbra d0,Convert_Char2 addq.l #1,a5 dbra d1,Convert_Topaz2 lea TurboText(pc),a0 move.l TTBase(pc),a1 Copy tt to MEMF_PUBLIC move.l #TurboEnd-TurboText-1,d0 Copy_TT move.b (a0)+,(a1)+ dbra d0,Copy_TT jsr _LVOPermit(a6) movem.l (sp)+,d0-d7/a0-a6 rts OldOpen ds.l 1 Gfxname dc.b "graphics.library",0 even TopazStruct dc.l 0 dc.w 8 dc.b 0,0 TopazName dc.b "topaz.font",0 even * New _LVOText routine TurboText cmp.w #90,d0 bhi OldText tst.w d0 beq TTExit move.l TT_Font(pc),d1 cmp.l rp_Font(a1),d1 bne OldText tst.b rp_AlgoStyle(a1) bne OldText movem.l d2-d6/a2-a5,-(sp) move.l PlaneMem(pc),a4 lea CharMem(pc),a2 moveq #0,d6 tst.b -16(a2) bne.s GetMem bset.b #1,-16(a2) bra.s Continue GetMem movem.l d0/a0-a1,-(sp) move.l a6,d5 move.l 4.w,a6 move.l #92*8,d0 move.l #MEMF_CLEAR!MEMF_CHIP!MEMF_PUBLIC,d1 jsr _LVOAllocMem(a6) move.l d0,a4 move.l d0,d6 movem.l (sp)+,d0/a0-a1 move.l d5,a6 Continue move.l a4,a5 move.l d0,d4 subq.w #1,d0 Create_Text moveq #0,d2 move.b (a0)+,d2 lsl.w #3,d2 move.l a2,a3 add.w d2,a3 move.b (a3)+,(a4)+ move.b (a3)+,0*92+91(a4) move.b (a3)+,1*92+91(a4) move.b (a3)+,2*92+91(a4) move.b (a3)+,3*92+91(a4) move.b (a3)+,4*92+91(a4) move.b (a3)+,5*92+91(a4) move.b (a3)+,6*92+91(a4) dbra d0,Create_Text move.l a5,a0 moveq #0,d0 moveq #92,d1 movem.w rp_cp_x(a1),d2-d3 Basel_store sub.w #$1234,d3 lsl.w #3,d4 add.w d4,rp_cp_x(a1) moveq #8,d5 jsr _LVOBltTemplate(a6) WaitBlt btst #14,$dff002 bne.s WaitBlt tst.l d6 beq.s No_Mem move.l d6,a1 move.l #92*8,d0 move.l a6,a5 move.l 4.w,a6 jsr _LVOFreeMem(a6) move.l a5,a6 bra.s Leave No_Mem lea BusyFlag(pc),a2 clr.b (a2) Leave movem.l (sp)+,d2-d6/a2-a5 TTExit rts OldText jmp $fffffe Dummy BusyFlag dc.l 0 PlaneMem dc.l 0 TT_Font dc.l 0 TTBase dc.l 0 CharMem ds.b 2 even TurboEnd WindowTitle dc.b "NewBoot V1.1 by André Wichmann of CLUSTER.",0 even NewOpenEnd Dosname dc.b "dos.library",0 even Intname dc.b "intuition.library",0 even cnop 0,32 dc.b "!!! THIS IS NO VIRUS !!! -AW-" ds.b 128 even