home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Disk&HD / BOOTBLOCKCOLLECTION.DMS / in.adf / not_mine / bigok.S < prev    next >
Encoding:
Text File  |  1992-04-02  |  11.0 KB  |  492 lines

  1. ExecBase:    EQU    4
  2. AllocSignal:    EQu    -$14a
  3. findtask:    equ    -$126
  4. freesignal:    equ    -$150
  5. allocmem:    equ    -$c6
  6. freemem:    equ    -$d2
  7. addport:    equ    -$162
  8. remport:    equ    -$168
  9. opendevice:    equ    -$1bc
  10. closedevice:    equ    -$1c2
  11. doio:        equ    -$1c8
  12. waitio:        equ    -$1d8
  13. alert:        equ    -$6c
  14. closelibrary:    equ    -$19e
  15. openlibrary:    equ    -$228
  16.  
  17. open:        equ    -$1e
  18. close:        equ    -$24
  19. read:        equ    -$2a
  20. write:        equ    -$30
  21. input:        equ    -$36
  22. output:        equ    -$3c
  23. lock:        equ    -$54
  24. examine:    equ    -$66
  25.  
  26. fibsize:    equ    300
  27. filesize:    equ    124
  28.  
  29. CMD_reset:    equ    1
  30. CMD_read:    equ    2
  31. CMD_write:    equ    3
  32. CMD_update:    equ    4
  33. CMD_clear:    equ    5
  34. CMD_stop:    equ    6
  35. CMD_start:    equ    7
  36. CMD_flush:    equ    8
  37. TD_motor:    equ    9
  38. TD_seek:    equ    10
  39. TD_format:    equ    11
  40. TD_remove:    equ    12
  41. TD_changenum:    equ    13
  42. TD_changestate:    equ    14
  43. TD_protstatus:    equ    15
  44.  
  45. io_command:    equ    28
  46. io_error:    equ    30
  47. io_actual:    equ    32
  48. io_lenght:    equ    36
  49. io_data:    equ    40
  50. io_offset:    equ    44
  51.  
  52. blocklongpos:    equ    $b8
  53.  
  54. start:
  55.   move.l    execbase,a6
  56.   move.l    #dosname,a1
  57.   clr.l        d0
  58.   jsr        openlibrary(a6)
  59.   move.l    d0,dosbase
  60.   beq        nodos
  61.   move.l    #welcome,a0
  62.   bsr        print
  63.   move.l    #quest1,a0
  64.   bsr        print
  65.   move.l    bootname,a0
  66.   bsr        print
  67.   move.l    #quest2,a0
  68.   bsr        print
  69.   bsr        getchars
  70.   move.b    #0,-1(a0,d0)        ;return loeschen
  71.   cmp.w        #1,d0
  72.   bne        default
  73.   move.l    bootname,a0
  74. default:
  75.   move.l    #1024,d1  ;minimalgr. wg. checksum
  76.   bsr         getfile
  77.   move.l    d0,fileort
  78.   move.l    d1,filelenght
  79.   beq        nofile
  80.   add.w        #511,d1
  81.   lsr.l        #8,d1
  82.   lsr.l        #1,d1
  83.   sub.w        #2,d1
  84.   cmp.w        #0,d1
  85.   bgt        ok
  86.   move.w    #0,d1
  87. ok:
  88.   move.w    d1,filesects
  89.   move.l    #quest3,a0
  90.   bsr        print
  91.   bsr        getchars
  92.   move.l    #0,d0
  93.   bsr        gettrackdisk
  94.   move.l    execbase,a6
  95.   move.l    #$0800,d0
  96.   move.l    #$10001,d1
  97.   jsr        allocmem(a6)
  98.   move.l    d0,tdbuffer
  99.   bne        goon1
  100.   move.l        #notdmem,a0
  101.   bsr        print
  102.   bra        cleanup3
  103.   goon1:
  104.   bsr        motoron
  105.   move.l    tdbuffer,a0
  106.   move.l    #1024,d0
  107.   move.l    diskrequest,a1
  108.   move.l    #880,d1
  109.   bsr        dread
  110.   move.l    tdbuffer,a0
  111.   add.l        #$13c,a0
  112.   move.l    (a0),d1
  113.   move.l    d1,bitmapsektor
  114.   add.l        #$2c4,a0
  115.   move.l     diskrequest,a1
  116.   move.l    #$400,d0
  117.   bsr        dread
  118.   move.l    tdbuffer,a0
  119.   add.l        #$400,a0
  120.   move.l    4(a0),d0
  121.   move.w    #0,d1
  122.   clr.l        d2
  123.   move.l    #2,d3
  124.   move.l    #3,d4
  125.   move.w    filesects,d5
  126. secloop:
  127.   btst        d1,d0
  128.   beq        nomore
  129.   cmp.w        d5,d2
  130.   bhs        hab_genug
  131.   bclr        d1,d0
  132.   bset        d3,d4
  133. hab_genug:
  134.   add.l        #1,d2
  135. nomore:
  136.   addi.w    #1,d1
  137.   addi.w    #1,d3
  138.   cmp.w        #20,d1
  139.   blt        secloop
  140.   move.l    d0,4(a0)
  141.   move.w    d2,tracksects
  142.   move.l    d4,blocklong
  143.   move.l    #mengemsg,a0
  144.   bsr        print
  145.   clr.l        d0
  146.   move.w    tracksects,d0
  147.   bsr        itoa
  148.   bsr        print
  149.   move.l    #menge2msg,a0
  150.   bsr        print
  151.   move.w    tracksects,d2
  152.   cmp.w        filesects,d2
  153.   bhi        goon2
  154.   move.l    #stillused,a0
  155.   bsr        print
  156.   bra        cleanup4
  157. goon2:
  158.   move.l    fileort,a0
  159.   move.l    blocklong,d4
  160.   move.l    d4,blocklongpos(a0)
  161.   bsr        bootblockchecksum
  162.   move.l    #$200,d0
  163.   move.l    #$0,d1
  164.   clr.l        d3
  165. wrloop:
  166.   bclr         d3,d4
  167.   beq        dontwrite
  168.   bsr        dwrite
  169.   bne        cleanup4
  170.   add.l        #$200,a0
  171. dontwrite:
  172.   add.w        #1,d3
  173.   add.l        #$200,d1
  174.   tst.l        d4
  175.   bne        wrloop
  176.   jsr        dupdate
  177.   move.l    tdbuffer,a0
  178.   add.l        #$400,a0
  179.   bsr        bitmapchecksum
  180.   move.l    bitmapsektor,d1
  181.   move.l    #512,d0
  182.   lsl.l        #8,d1
  183.   lsl.l        #1,d1
  184.   bsr        dwrite
  185.   bne        cleanup4
  186.   bsr        dupdate
  187.   move.l    #goodinstall,a0
  188.   bsr        print
  189. cleanup4:
  190.   bsr        motoroff
  191. cleanup3:
  192.   move.l    execbase,a6
  193.   move.l    tdbuffer,a1
  194.   move.l    #$0800,d0
  195.   jsr        freemem(a6)
  196.   move.l    execbase,a6
  197.   move.l    fileort,a1
  198.   move.l    filelenght,d0
  199.   jsr        freemem(a6)
  200.   move.l    diskrequest,a1
  201.   bsr        closetrackdisk
  202. nofile:
  203.   move.l    execbase,a6
  204.   move.l    dosbase,a1
  205.   jsr        closelibrary(a6)
  206. nodos:
  207.   move.l    oldcheck,d0
  208.   move.l    newcheck,a0
  209. ;illegal
  210.   clr.l        d0
  211.   rts
  212. fileort:        dc.l    0
  213. filelenght:        dc.l    0
  214. filesects:        dc.w    0
  215. tracksects:        dc.w    0
  216. bitmapsektor:        dc.l    0
  217. tdbuffer:        dc.l    0
  218. blocklong:        dc.l    0
  219. bootname:        dc.l    bn
  220. bn:            dc.b    "df1:boottrack",0
  221. even
  222.  
  223. bootblockchecksum:
  224.   movem.l    d0-d3/a0-a1,-(a7)
  225.   clr.l        d0
  226.   clr.l        d2
  227.   clr.l        d3
  228.   move.l    #$ff,d1
  229.   move.l    a0,a1
  230.   clr.l        $4(a0)
  231.   move.w    #$4,ccr
  232. bo_checkloop:
  233.   move.l    (a0)+,d2
  234.   addx.l    d2,d0
  235.   dbra        d1,bo_checkloop
  236.   move.l    #-1,d1
  237.   subx.l    d0,d1
  238.   move.l    d1,$4(a1)
  239.   move.l    d1,test
  240.   movem.l    (a7)+,d0-d3/a0-a1
  241.   rts
  242.  
  243. bitmapchecksum:
  244.   movem.l        d0-d3/a0-a1,-(a7)
  245.   clr.l        d0
  246.   clr.l        d2
  247.   clr.l        d3
  248.   move.l    a0,a1
  249.   move.l    (a0),oldcheck
  250.   clr.l        (a0)
  251.   move.w    #$7f,d1
  252. bm_checkloop:
  253.   move.l    (a0)+,d2
  254.   sub.l        d2,d0
  255.   dbra        d1,bm_checkloop
  256.   move.l    d0,(a1)
  257.   move.l    d0,newcheck
  258.   movem.l    (a7)+,d0-d3/a0-a1
  259.   rts
  260.  
  261. itoa:
  262.   move.l    #ascii_zahl+6,a0
  263.   move.l    #0,-4(a0)
  264.   move.w    #0,-6(a0)
  265. w_loopi:
  266.   divu        #10,d0
  267.   swap        d0
  268.   addi.w    #"0",d0
  269.   move.b    d0,-(a0)
  270.   clr.w        d0
  271.   swap        d0
  272.   cmp.w        #0,d0
  273.   bne        w_loopi
  274.   rts
  275. even
  276. ascii_zahl:    blk.b    7,0
  277. even
  278. motoron:
  279.   move.l    diskrequest,a1
  280.   move.w    #td_motor,io_command(a1)
  281.   move.l    #1,io_lenght(a1)
  282.   move.l    execbase,a6
  283.   jsr        doio(a6)
  284.   rts
  285. motoroff:
  286.   move.l    diskrequest,a1
  287.   move.w    #td_motor,io_command(a1)
  288.   move.l      #0,io_lenght(a1)
  289.   move.l    execbase,a6
  290.   jsr        doio(a6)
  291.   rts
  292. dcheckwp:
  293.   movem.l    d0-d7/a0-a6,-(a7)
  294.   move.l        diskrequest,a1
  295.   move.w    #td_protstatus,io_command(a1)
  296.   move.l    execbase,a6
  297.   jsr        doio(a6)
  298.   move.l    diskrequest,a1
  299.   move.l    io_actual(a1),d0
  300.   movem.l     (a7)+,d0-d7/a0-a6
  301.   rts
  302. dread:
  303.   lsl.l        #8,d1
  304.   lsl.l        #1,d1
  305.   move.w    #cmd_read,io_command(a1)
  306.   move.l    d1,io_offset(a1)
  307.   move.l    a0,io_data(a1)
  308.   move.l    d0,io_lenght(a1)
  309.   move.l    execbase,a6
  310.   jsr        doio(a6)
  311.   rts
  312. even
  313. dwrite:
  314.   movem.l    d0-d7/a0-a6,-(a7)
  315.   bsr        dcheckwp
  316.   beq        notprotected
  317.   move.l    #wpon,a0
  318.   bsr        print
  319.   move.b    #1,d0
  320.   bra        endofwrite
  321. notprotected:
  322.   move.l    diskrequest,a1
  323.   move.l    d1,io_offset(a1)
  324.   move.w    #cmd_write,io_command(a1)
  325.   move.l    d0,io_lenght(a1)
  326.   move.l    a0,io_data(a1)
  327.   move.l    execbase,a6
  328.   jsr        doio(a6)
  329.   move.b        #0,d0
  330. endofwrite:
  331.   movem.l    (a7)+,d0-d7/a0-a6
  332.   rts
  333. dupdate:
  334.   movem.l    d0-d7/a0-a6,-(a7)
  335.   move.l    diskrequest,a1
  336.   move.w    #cmd_update,io_command(a1)
  337.   move.l    execbase,a6
  338.   jsr        doio(a6)
  339.   movem.l    (a7)+,d0-d7/a0-a6
  340.   rts
  341. gettrackdisk:
  342.   move.l    d0,unit
  343.   move.l    #0,a0
  344.   move.b    #0,d0
  345.   bsr        createport
  346.   move.l    a0,diskport
  347.   beq        gt_fail1
  348.   move.l    #56,d0
  349.   bsr        createextio
  350.   move.l    a0,diskrequest
  351.   beq        gt_fail2
  352.   move.l    execbase,a6
  353.   move.l    #diskname,a0
  354.   move.l    unit,d0
  355.   move.l    diskrequest,a1
  356.   move.l    #0,d1
  357.   jsr        opendevice(a6)
  358.   tst.l        d0
  359.   bne        gt_fail3
  360.   move.l    diskrequest,a1
  361.   rts
  362. gt_fail1:
  363.   move.l    #0,a1
  364.   rts
  365. closetrackdisk:
  366.   move.l    a1,diskrequest
  367.   move.l    execbase,a6
  368.   move.l    diskrequest,a1
  369.   jsr        closedevice(a6)
  370. gt_fail2:
  371.   move.l    diskrequest,a0
  372.   bsr        deleteextio
  373. gt_fail3:
  374.   move.l    diskport,a0
  375.   bsr        deleteport
  376.   move.l    #0,a1
  377.   rts
  378. unit:        dc.l    0
  379. diskport:    dc.l    0
  380. diskrequest:    dc.l    0
  381. diskname:    dc.b    "trackdisk.device",0
  382. even
  383. even
  384. createport:
  385.   move.l    a0,name
  386.   move.b    d0,prio
  387.   move.l    execbase,a6
  388.   move.b    #-1,d0
  389.   jsr        allocsignal(a6)
  390.   move.b    d0,sigbit
  391.   bmi.l        nosignal
  392.   move.l    execbase,a6
  393.   move.l    #$10001,d1
  394.   move.l    #34,d0
  395.   jsr        allocmem(a6)
  396.   move.l    d0,port
  397.   beq        nomemory
  398.   move.l    d0,a0
  399.   move.l    name,10(a0)
  400.   move.b    prio,9(a0)
  401.   move.b    #4,8(a0)
  402.   move.b    #0,14(a0)
  403.   move.b    sigbit,15(a0)
  404.   move.l    execbase,a6
  405.   move.l    #0,a1
  406.   jsr        findtask(a6)
  407.   move.l    d0,16(a0)
  408.   cmpi.l    #0,name
  409.   beq            donewlist
  410.   move.l    execbase,a6
  411.   move.l    port,a1
  412.   jsr        addport(a6)
  413.   bra.s        rts
  414. donewlist:
  415.   lea        20(a0),a0
  416.   bsr        newlist
  417. rts:
  418.   move.l    port,a0
  419.   rts
  420. nosignal:
  421.   clr.l        port
  422.   bra.s        rts
  423. nomemory:
  424.   move.l    execbase,a6
  425.   clr.l        d0
  426.   move.b    sigbit,d0
  427.   jsr        freesignal(a6)
  428.   bra.s        nosignal
  429. even
  430. port:        dc.l    0
  431. sigbit:        dc.b    0
  432. prio:        dc.b    0
  433. name:        dc.l    0
  434. deleteport:
  435.   cmpi.l    #0,10(a0)
  436.   beq        noremport
  437.   move.l    a0,-(a7)
  438.   move.l    execbase,a6
  439.   move.l    a0,a1
  440.   jsr        remport(a6)
  441.   move.l    (a7)+,a0
  442. noremport:
  443.   move.b    #$ff,8(a0)
  444.   move.l    #-1,20(a0)
  445.   move.l    a0,-(a7)
  446.   move.l    execbase,a6
  447.   clr.l        d0
  448.   move.b    15(a0),d0
  449.   jsr        freesignal(a6)
  450.   move.l    execbase,a6
  451.   move.l    (a7)+,a1
  452.   move.l    #34,d0
  453.   jsr        freemem(a6)
  454.   rts
  455. lh_tail:        equ    4
  456. lh_tailpr©¾Ïã÷ '$" #'-.ôÕóü'0 ÷öóð÷ÿú²ÊÙì'#  #'- Ïçù5øöõðóÿЫ½Ñã÷
  457. %'" #) Ø×ôÿ2(üööòñü¢»ÉØìÿ+&!#'ôËê÷0 ÷öôð÷¯¿Óâõ*$ # ÈÛó4 úööñôÿ    à»ÇÙëþ'(!ÜËë÷'*    þööóñû    ´ÄÏáó-' øÁÞñ1 øõôð÷    »ÇÚéû ,#ÈÍëû,$úõõñòÿ     ÃÍáñ') ä¿ßï,
  458. ÿõôóðù ÈÍ×çù.&»Îéÿ- øôôðô $ÃÏáïÿ,"нÞí(üôôòðü&ÊÕçö%(ð³Îæÿ, öôóðö !,ÐÔÞîü
  459. -$À»Üí"ûóôññþ
  460. *.ÇÖçó* â­Íâ( õóóï÷%0ÒÛîù%&µ¹Úí#úóôðñÿ -4ØÛåòÿ ,  Ø©ËÞ$
  461. ôóòï÷'32ÏÜî÷( ô¬·×ë"ùóôðòÿ !/7Ùãòý    &"̧ÇÛ!    ôóòïù*59Ôáëö)
  462. ð¦¶Ôë ùóóïòÿ#190×âòû$È¥ÆØôóñîø+7<ßçõÿ '    ð¢³Ñé ùóóîòÿ #3;=Öäñù&Ä¢ÃÖôóñîø,7= ßçõÿ         ì ¯Îç
  463. ùóóîòÿ $3<?àçîø(ğ¿Óÿ ôóñîø,8>8Þæõþ"
  464. ì ¯Ëãùóóîñÿ #3<@æìø &ĝ¾Ñÿ
  465. ÿõóñî÷,8?@Ýèôý" ê ­Éßùôôðñÿ#1<? æìú    È¥¿Öÿ    ÷õ÷ö÷$.7:äîòÿ 
  466. ð´·Ïéüö÷úûü%+0$åñøÔ·ÉÝýúöøýÿ     &(+øíõý     íÆÃ×î    þú÷ûÿ %& çôøÿ     ýÜÆÏåýÿýúùý    "#ëùüÿ    íÐÏÝóÿÿþüúúþ      øóýþ üàÑÙëüüþþüúûÿ òùÿÿ ðÚ×æöÿýûýýüûüÿõþ øçÚßðüýûûýýüüýüúÿ     ðâßë÷ÿþûúýþþþýþ    
  467. úýÿøìãçñùþþûúþÿÿ
  468. üÿþòéçíõúþýûûþ þÿøïéëñ÷ûüüûþÿ ÿÿýôíëïöùûüûûÿÿ      ÿÿÿÿùòíîóøúüûûüÿ
  469. 
  470. ÿÿÿÿý÷ñïñöùüüûûþÿ      ÿÿþÿúõññôøûüüûûþÿ
  471.  
  472. ÿÿýøôòóöùûüüüüÿÿ    
  473.     ÿþû÷ôóõøúüüýüÿÿÿ    
  474.  
  475. ÿÿÿýú÷ôõ÷ùûüýþýÿÿÿ    
  476.  
  477.  
  478.     þþüù÷ö÷øúûüþþÿÿ            
  479. ÿþÿþüúø÷øùúüýþÿ            þÿÿþýüúùøùúúüýþÿ    ÿþÿÿþüüûúúúúûüþÿ    þþÿþýüüûûûûûüýþÿþÿÿþýýüüüüüüýþþÿ    þþýÿüûýûûüùüøüýúýúüþÿÿýþ    ýýþþúÿüþúþûüüÿüþý ÿõôôôõùûÿÿÿÿûùôîîðõÿ ÿùðéßßãêõ  ûðéåéîù ÿùôîééêôû  ÿõððôùÿÿÿùõôôôõùûÿùîßÚÞêÿ !ùêßÞßéôÿ  ùîãßåô  ûõðîêîîôûÿùõõõùûÿÿûõõõõûÿÿùôôôùÿÿùõõõùùûÿÿõðîîðõûÿÿÿûõôððôû  ùêÞØØãôÿ ûêãßåðÿ ùðîðõÿ ûðîîðõÿ  õîêîôùÿÿûùõõõõùûÿûõðêéêîôù ûðêêðõûÿûôîêîùûõôðîîððôû ûôééêôûÿÿÿÿÿÿÿÿûùõùùûÿÿÿùôðôõùûûûûûûûûûÿÿÿùõðððôõõõõûÿÿÿùõôôùûÿÿÿÿÿûùõðîêêôû ÿîÚÏÏÞô &! ûêÞÚãîù ûôêêîù  õîååêôû  õêååêõÿåÏÇÍÞù"," ùãÔÔÞêû "!ðãßåðÿ  õêååîÿ ùêãÞÞéù ÿôéããéõ ûîååîû ùêßÚßêûÿõêãßåðÿ ôåÞãð(&ôãØÒÔßô! ÿõððôùûÿûûùõõõõûÿÿûõôõùûÿÿÿõîåãåðÿ ùêßÞãêõ  ûôîêêîôûÿùõôõùÿûðêéðû õêããéù õêßßåôÿûôêééðû  ÿûûûûõôððôùÿûõîêðõûÿÿÿÿûõðîðôû õéããêõÿ ùîåãéôÿ ÿõðîðôõùûÿÿùõôðôôõûÿÿÿûùùùùûûÿÿÿõîééîõÿÿûùõõùõôùÿõêãßåðÿ  ÿõðîîðù ûðååêôÿÿÿÿõîéãåðÿîÚÏÍØéû &&îßÚÞéôÿ  ðßÞãðÿ  ùîåßßêû  ûîååêôûùêÞÚÞéù  õéãåðÿ  ôééðû ûõõùÿÿÿõððõÿûðãÚÚãõûîéåêùõôôôùÿÿÿÿÿÿûùôõùùûùûÿÿùîãßãêùêØÒÔãõ  ÿôîêêðù ùîééðùÿõîêêôÿ ðßØÒÔãôðãÞãîÿ !ùéßÞéû tion ",10,0
  480. quest1:      dc.b    "wie ist der filename des zu installierenden"
  481.       dc.b    "files ?",10,"(return =",34,0
  482. quest2:      dc.b    34,")",10,0
  483. quest3:      dc.b    "bitte legen sie nun die disk auf der ich"
  484.       dc.b    "installieren soll in df0:",10
  485.       dc.b    "und drucken sie return ",10,0
  486. mengemsg: dc.b    "auf dieser disk sind ",0
  487. menge2msg:dc.b    " freie sektoren. ",0
  488. wpon:      dc.b    "diskette isr schreibgeschutzt!",10,0
  489. goodinstall:
  490.       dc.b    "der boottrack ist nun installiert,",10
  491.       dc.b    "viel spass damit ! ",10,0
  492.