home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / diskutil / newboot.lha / NBInstall_NTSC.asm < prev    next >
Encoding:
Assembly Source File  |  1992-05-14  |  7.1 KB  |  351 lines

  1.         opt    c-,d-,l-,o1+,o2+,p-,x-
  2.  
  3. * ---------------------------------------------------------------------------
  4. * -----                       NewBoot V1.1 Install                      -----
  5. * -----                    ~~~~~~~~~~~~~~~~~~~~~~~~~~                   -----
  6. * -----                  © by André Wichmann of CLUSTER                 -----
  7. * -----                 Aragorn 29/09/1990 - 30/09/1990.                -----
  8. * ---------------------------------------------------------------------------
  9.  
  10. *
  11. *   NTSC version
  12. *
  13.  
  14.         incdir    ram:include/
  15.         include    exec/exec_lib.i
  16.         include    exec/execbase.i
  17.         include    exec/memory.i
  18.         include    intuition/intuition_lib.i
  19.         include    graphics/graphics_lib.i
  20.         include    graphics/rastport.i
  21.  
  22.         SECTION    "",CODE_C
  23.  
  24. _Main        lea    BootBlock(pc),a0    calc checksum
  25.         move.w    #$ff,d0
  26.         moveq    #0,d1
  27.         move.l    a0,a2
  28. Loop        add.l    (a0)+,d1
  29.         bcc.s    Carry
  30.         addq.l    #1,d1
  31. Carry        dbra    d0,Loop
  32.         not.l    d1
  33.         add.l    4(a2),d1
  34.         bcc.s    Carry2
  35.         addq.l    #1,d1
  36. Carry2        move.l    d1,4(a2)
  37.         sub.l    a1,a1
  38.         CALLEXEC FindTask
  39.         move.l    d0,ReplyPort+16
  40.         lea    ReplyPort(pc),a1
  41.         CALLEXEC AddPort
  42.         lea    DiskIO(pc),a1
  43.         move.l    #ReplyPort,14(a1)
  44.         move.l    #0,d0
  45.         clr.l    d1
  46.         lea    Trdname(pc),a0
  47.         CALLEXEC OpenDevice
  48.         lea    DiskIO(pc),a1
  49.         move.w    #3,28(a1)
  50.         move.l    #BootBlock,40(a1)
  51.         move.l    #2*512,36(a1)
  52.         move.l    #0*512,44(a1)
  53.         CALLEXEC DoIO
  54.         move.w    #4,28(a1)
  55.         CALLEXEC DoIO
  56.         move.w    #9,28(a1)
  57.         move.l    #0,36(a1)
  58.         CALLEXEC DoIO
  59.         lea    ReplyPort(pc),a1
  60.         CALLEXEC RemPort
  61.         lea    DiskIO(pc),a1
  62.         CALLEXEC CloseDevice
  63.         moveq    #0,d0
  64.         rts
  65.  
  66. Trdname        dc.b    "trackdisk.device",0
  67.         even
  68. DiskIO        ds.l    20
  69. ReplyPort    ds.l    8
  70.  
  71.         opt    p+
  72.  
  73. tf_BaseLine    equ    26
  74. tf_CharData    equ    34
  75. tf_Modulo    equ    38
  76.  
  77. * Dos data
  78.  
  79. BootBlock    dc.b    "DOS",0            DOS ID
  80.         dc.l    $0            Checksum
  81.         dc.l    $370            Ptr on rootblock
  82.  
  83. * DOS stuff
  84.  
  85.         lea    dosname(pc),a1        DOS Startup
  86.         move.l    4.w,a6
  87.         jsr    -96(a6)            FindResident()
  88.         move.l    d0,a0
  89.         move.l    22(a0),a0
  90.         clr.l    d0            and return
  91.  
  92. * Own code
  93.  
  94.         movem.l    d0-d7/a0-a6,-(sp)    save regs    
  95.         btst    #10,$dff016        right mb ?
  96.         bne.s    DoBB
  97.         move.w    #$044,$dff180        set color
  98.         move.w    #$044,$dff182
  99.         move.w    #$044,$dff184
  100.         move.w    #$044,$dff186
  101.         bra    NoBB
  102. DoBB        move.w    #$440,$dff180        set color
  103.         move.w    #$440,$dff182
  104.         move.w    #$440,$dff184
  105.         move.w    #$440,$dff186
  106.  
  107. * Clear reset
  108.  
  109.         move.l    4.w,a6            get SysBase
  110.         clr.l    CoolCapture(a6)        clear Reset-vectors
  111.         clr.l    ColdCapture(a6)
  112.         clr.l    KickMemPtr(a6)
  113.         clr.l    KickTagPtr(a6)
  114.  
  115. * Install New OpenWindow
  116.  
  117.         move.l    #NewOpenEnd-NewOpen,d0    Get mem
  118.         clr.l    d1
  119.         jsr    _LVOAllocMem(a6)
  120.         move.l    d0,a5
  121.         lea    Intname(pc),a1        open int-lib
  122.         clr.l    d0
  123.         jsr    _LVOOpenLibrary(a6)
  124.         move.l    d0,a0
  125.         lea    OldOpen(pc),a1
  126.         move.l    _LVOOpenWindow+2(a0),(a1)    save old OpenWindow ptr
  127.         move.l    a5,_LVOOpenWindow+2(a0)    set new OpenWindow ptr
  128.         lea    NewOpen(pc),a0        copy new routine
  129.         move.l    #NewOpenEnd-NewOpen-1,d0
  130. CopyNew        move.b    (a0)+,(a5)+
  131.         dbra    d0,CopyNew
  132.  
  133. * Kill Fastmem optionally
  134.  
  135.         btst    #6,$bfe001
  136.         bne.s    NoAllocFast
  137. AllocFast    move.l    #32768,d7        Start with 60000 bytes
  138. AllocLoop_1    move.l    d7,d0            Alloc mem
  139.         move.l    #MEMF_FAST,d1
  140.         jsr    _LVOAllocMem(a6)
  141.         tst.l    d0
  142.         bne.s    AllocLoop_1
  143.         lsr.l    #1,d7            half size
  144.         tst.l    d7
  145.         bne.s    AllocLoop_1
  146.         move.w    #$404,$dff180        set color
  147.         move.w    #$404,$dff182
  148.         move.w    #$404,$dff184
  149.         move.w    #$404,$dff186
  150. NoAllocFast    
  151.  
  152. * DOS stuff
  153.  
  154. NoBB        movem.l    (sp)+,d0-d7/a0-a6
  155.         rts
  156.  
  157. * New _LVOOpenWindow routine
  158.  
  159. NewOpen        lea    Windowtitle(pc),a1    set new title
  160.         move.l    a1,$1a(a0)
  161.         move.l    OldOpen(pc),_LVOOpenWindow+2(a6)
  162.         jsr    _LVOOpenWindow(a6)
  163.         movem.l    d0-d7/a0-a6,-(sp)
  164.         move.l    4.w,a6
  165.         jsr    _LVOForbid(a6)
  166.         lea    Topazname(pc),a0    set ptr
  167.         lea    Topazstruct(pc),a1
  168.         move.l    a0,(a1)
  169.         lea    Gfxname(pc),a1        open gfx-lib
  170.         clr.l    d0
  171.         jsr    _LVOOpenLibrary(a6)
  172.         move.l    d0,a5
  173.         move.l    #TurboEnd-TurboText+8*256,d0
  174.         move.l    #MEMF_CLEAR!MEMF_PUBLIC,d1
  175.         jsr    _LVOAllocMem(a6)
  176.         lea    TTBase(pc),a0
  177.         move.l    d0,(a0)
  178.         lea    OldText+2(pc),a0
  179.         move.l    _LVOText+2(a5),(a0)
  180.         move.l    TTBase(pc),_LVOText+2(a5)
  181.         move.l    #92*8,d0        Mem for text-plane (blit)
  182.         move.l    #MEMF_CLEAR!MEMF_CHIP!MEMF_PUBLIC,d1
  183.         jsr    _LVOAllocMem(a6)
  184.         lea    PlaneMem(pc),a0
  185.         move.l    d0,(a0)
  186.         move.l    a5,a6
  187.         lea    TopazStruct(pc),a0
  188.         jsr    _LVOOpenFont(a6)
  189.         lea    TT_Font(pc),a0
  190.         move.l    d0,(a0)
  191.         move.l    d0,a0
  192.         lea    Basel_store+2(pc),a1
  193.         move.w    tf_BaseLine(a0),(a1)
  194.         move.l    TTBase(pc),a2
  195.         add.l    #CharMem-TurboText,a2
  196.         moveq    #31,d0
  197. Create_0to31    move.b    #%00010000,(a2)+
  198.         move.b    #%00111000,(a2)+
  199.         move.b    #%00111000,(a2)+
  200.         move.b    #%01101100,(a2)+
  201.         move.b    #%01101100,(a2)+
  202.         move.b    #%11111110,(a2)+
  203.         move.b    #%11111110,(a2)+
  204.         move.b    #%00000000,(a2)+
  205.         dbra    d0,Create_0to31
  206.         move.l    TT_Font(pc),a5
  207.         clr.l    d4
  208.         move.w    tf_Modulo(a5),d4
  209.         move.l    tf_CharData(a5),a5
  210.         moveq    #95,d1
  211. Convert_Topaz    move.l    a5,a4
  212.         moveq    #7,d0
  213. Convert_Char    move.b    (a4),(a2)+
  214.         add.l    d4,a4
  215.         dbra    d0,Convert_Char
  216.         addq.l    #1,a5
  217.         dbra    d1,Convert_Topaz
  218.         moveq    #31,d0
  219. Create_128to159    move.b    #%00010000,(a2)+
  220.         move.b    #%00111000,(a2)+
  221.         move.b    #%01101100,(a2)+
  222.         move.b    #%11000110,(a2)+
  223.         move.b    #%01101100,(a2)+
  224.         move.b    #%00111000,(a2)+
  225.         move.b    #%00010000,(a2)+
  226.         move.b    #%00000000,(a2)+
  227.         dbra    d0,Create_128to159
  228.         moveq    #95,d1
  229. Convert_Topaz2    move.l    a5,a4
  230.         moveq    #7,d0
  231. Convert_Char2    move.b    (a4),(a2)+
  232.         add.l    d4,a4
  233.         dbra    d0,Convert_Char2
  234.         addq.l    #1,a5
  235.         dbra    d1,Convert_Topaz2
  236.         lea    TurboText(pc),a0
  237.         move.l    TTBase(pc),a1        Copy tt to MEMF_PUBLIC
  238.         move.l    #TurboEnd-TurboText-1,d0
  239. Copy_TT        move.b    (a0)+,(a1)+
  240.         dbra    d0,Copy_TT
  241.         jsr    _LVOPermit(a6)
  242.         movem.l    (sp)+,d0-d7/a0-a6
  243.         rts
  244.  
  245. OldOpen        ds.l    1
  246. Gfxname        dc.b    "graphics.library",0
  247.         even
  248. TopazStruct    dc.l    0
  249.         dc.w    8
  250.         dc.b    0,0
  251. TopazName    dc.b    "topaz.font",0
  252.         even
  253.  
  254. * New _LVOText routine
  255.  
  256. TurboText    cmp.w    #90,d0
  257.         bhi    OldText
  258.         tst.w    d0
  259.         beq    TTExit
  260.         move.l    TT_Font(pc),d1
  261.         cmp.l    rp_Font(a1),d1
  262.         bne    OldText
  263.         tst.b    rp_AlgoStyle(a1)
  264.         bne    OldText
  265.         movem.l    d2-d6/a2-a5,-(sp)
  266.         move.l    PlaneMem(pc),a4
  267.         lea    CharMem(pc),a2
  268.         moveq    #0,d6
  269.         tst.b    -16(a2)
  270.         bne.s    GetMem
  271.         bset.b    #1,-16(a2)
  272.         bra.s    Continue
  273. GetMem        movem.l    d0/a0-a1,-(sp)
  274.         move.l    a6,d5
  275.         move.l    4.w,a6
  276.         move.l    #92*8,d0
  277.         move.l    #MEMF_CLEAR!MEMF_CHIP!MEMF_PUBLIC,d1
  278.         jsr    _LVOAllocMem(a6)
  279.         move.l    d0,a4
  280.         move.l    d0,d6
  281.         movem.l    (sp)+,d0/a0-a1
  282.         move.l    d5,a6
  283. Continue    move.l    a4,a5
  284.         move.l    d0,d4
  285.         subq.w    #1,d0
  286. Create_Text    moveq    #0,d2
  287.         move.b    (a0)+,d2
  288.         lsl.w    #3,d2
  289.         move.l    a2,a3
  290.         add.w    d2,a3
  291.         move.b    (a3)+,(a4)+
  292.         move.b    (a3)+,0*92+91(a4)
  293.         move.b    (a3)+,1*92+91(a4)
  294.         move.b    (a3)+,2*92+91(a4)
  295.         move.b    (a3)+,3*92+91(a4)
  296.         move.b    (a3)+,4*92+91(a4)
  297.         move.b    (a3)+,5*92+91(a4)
  298.         move.b    (a3)+,6*92+91(a4)
  299.         dbra    d0,Create_Text
  300.         move.l    a5,a0
  301.         moveq    #0,d0
  302.         moveq    #92,d1
  303.         movem.w    rp_cp_x(a1),d2-d3
  304. Basel_store    sub.w    #$1234,d3
  305.         lsl.w    #3,d4
  306.         add.w    d4,rp_cp_x(a1)
  307.         moveq    #8,d5
  308.         jsr    _LVOBltTemplate(a6)
  309. WaitBlt        btst    #14,$dff002
  310.         bne.s    WaitBlt
  311.         tst.l    d6
  312.         beq.s    No_Mem
  313.         move.l    d6,a1
  314.         move.l    #92*8,d0
  315.         move.l    a6,a5
  316.         move.l    4.w,a6
  317.         jsr    _LVOFreeMem(a6)
  318.         move.l    a5,a6
  319.         bra.s    Leave
  320. No_Mem        lea    BusyFlag(pc),a2
  321.         clr.b    (a2)
  322. Leave        movem.l    (sp)+,d2-d6/a2-a5
  323. TTExit        rts
  324.  
  325. OldText        jmp    $fffffe            Dummy
  326.  
  327. BusyFlag    dc.l    0
  328. PlaneMem    dc.l    0
  329. TT_Font        dc.l    0
  330. TTBase        dc.l    0
  331. CharMem        ds.b    2
  332.         even
  333.  
  334. TurboEnd
  335.  
  336. WindowTitle    dc.b    "NewBoot V1.1 by André Wichmann of CLUSTER.",0
  337.         even
  338.  
  339. NewOpenEnd
  340.  
  341. Dosname        dc.b    "dos.library",0
  342.         even
  343. Intname        dc.b    "intuition.library",0
  344.         even
  345.  
  346.         cnop    0,32
  347.         dc.b    "!!! THIS IS NO VIRUS !!! -AW-"
  348.         ds.b    128
  349.         even
  350.  
  351.