
* DoBB V1.10 installiert einen BootBlock auf Diskette
* oder  schreibt  einen  BootBlock  in  eine  Datei !

* 33mDoBB0m V1.10 (r) 29. Dez, 1993 von   Volker Stepprath
*                                    Tegeler Str. 7
*                                    40789 Monheim
*                                    Deutschland

* Editor:    AZ Editor v1.50 (c) « Software Winery »
* Assembler: GenAm Macro Assembler V2.11D (c) 85/8 HiSoft




             * Variablen definieren *


_SYSBase           equ        4
_LVOOpen           equ      -30
_LVOClose          equ      -36
_LVORead           equ      -42
_LVOWrite          equ      -48
_LVOOutput         equ      -60
_LVOAllocMem       equ     -198
_LVOFreeMem        equ     -210
_LVOFindTask       equ     -294
_LVOOldOpenLibrary equ     -408
_LVOCloseLibrary   equ     -414
_LVOOpenDevice     equ     -444
_LVOCloseDevice    equ     -450
_LVODoIO           equ     -456




_NULLBYTE    move.b  #0,-1(a0,d0.l)




             * Parameter retten *


             move.l  a0,d6
             move.l  d0,d7




             * Hauptprogramm *


_MAIN        bsr     _OPENALL

             move.l  d6,a0
             move.l  d7,d0

             cmp.l   #7,d0
             ble     _FEHLER
             cmp.b   #58,3(a0)
             bne     _FEHLER
             move.b  2(a0),d4
             sub.b   #48,d4
             cmp.b   #0,d4
             blt     _FEHLER
             cmp.b   #3,d4
             bgt     _FEHLER

             bsr     _OPENDEV
             cmp.l   #0,d0
             bne     _DEVFEHLER

             bsr     _ALLOCMEM
             bsr     _BOOTBLOCK
             bsr     _FREEMEM
             bsr     _CLOSEDEV
             bra     _CLOSELIB




             * dos.library öffnen & Akt. Fenster *


_OPENALL     move.l  _SYSBase,a6
             lea     Dosname(pc),a1
             jsr     _LVOOldOpenLibrary(a6)
             move.l  d0,_DOSBase

             move.l  _DOSBase(pc),a6
             jsr     _LVOOutput(a6)
             move.l  d0,Handle
             rts




             * trackdisk.device bereitsetellen *


_OPENDEV     move.l  _SYSBase,a6
             sub.l   a1,a1
             jsr     _LVOFindTask(a6)
             move.l  d0,DiskReply+$10
             lea     DiskIO(pc),a1
             move.l  #DiskReply,14(a1)
             clr.l   d1
             move.l  d4,d0
             lea     Device(pc),a0
             jsr     _LVOOpenDevice(a6)
             rts




             * Speicher reservieren *


_ALLOCMEM    move.l  _SYSBase,a6
             move.l  #1024,d0
             move.l  #$10003,d1
             jsr     _LVOAllocMem(a6)
             move.l  d0,DiskBuff
             rts




             * Speicher freigeben *


_FREEMEM     move.l  _SYSBase,a6
             move.l  #1024,d0
             move.l  DiskBuff(pc),a1
             jsr     _LVOFreeMem(a6)
             rts




             * Parameter auswerten und ausführen *


_BOOTBLOCK   move.l  d6,a0
             add.b   #3,(a0)

             cmp.b   #45,5(a0)        * Korekter Parameter -
             bne     _USAGE           * ÄhÄh !

             clr.l   d0
             move.b  6(a0),d0
             bclr    #5,d0            * in Großbuchstabe wandeln

             cmp.b   #82,d0           * Parameter R ?
             beq     _BOOTODAT        * Jo!

             cmp.b   #87,d0           * Parameter W ?
             beq     _DATOBOOT        * Jear!

             cmp.b   #78,d0           * Parameter N ?
             beq     _NOBOOT          * Klaro!

             cmp.b   #68,d0           * Parameter D ?
             beq     _DOSBOOT         * Nlogen!

             cmp.b   #70,d0           * Parameter F ?
             beq     _FORMATBOOT      * Jeil!

             cmp.b   #79,d0           * Parameter O ?
             beq     _OS3BOOT         * Escht!

             cmp.b   #81,d0           * Parameter Q ?
             beq     _QUARTEXBOOT     * Issohr!

             bra     _USAGE           * Ungültige Parameter !




             * BootBlock in Datei schreiben *


_BOOTODAT    bsr     _READBOOT
             bsr     _GETNAME

             move.l  _DOSBase(pc),a6
             move.l  #1006,d2
             jsr     _LVOOpen(a6)
             move.l  d0,Handledat
             cmp.l   #0,Handledat
             beq     _FILEFEHLER
             move.l  Handledat(pc),d1
             move.l  DiskBuff(pc),d2
             move.l  #1024,d3
             jsr     _LVOWrite(a6)
             move.l  Handledat(pc),d1
             jsr     _LVOClose(a6)
             rts





             * BootBlock formatieren & in Datei schreiben *


_FORMATBOOT  bsr     _READBOOT
             bsr     _GETNAME

             move.l  _DOSBase(pc),a6
             move.l  #1006,d2
             jsr     _LVOOpen(a6)
             move.l  d0,Handledat
             cmp.l   #0,Handledat
             beq     _FILEFEHLER

             move.l  DiskBuff(pc),a1
             move.l  #1024,d1
             clr.l   d3
             clr.l   d4

_FORMAT      addq    #1,d4
             tst.b   (a1)+
             beq     _LOOP
             move.l  d4,d3
_LOOP        dbra    d1,_FORMAT

             move.l  Handledat(pc),d1
             move.l  DiskBuff(pc),d2
             jsr     _LVOWrite(a6)
             move.l  Handledat(pc),d1
             jsr     _LVOClose(a6)
             rts




             * BootBlock einlesen *


_READBOOT    move.l  _SYSBase,a6
             lea     DiskIO(pc),a1
             move.w  #2,28(a1)
             move.l  DiskBuff(pc),40(a1)
             move.l  #1024,36(a1)
             move.l  #0,44(a1)
             jsr     _LVODoIO(a6)
             rts




             * Datei in BootBlock installieren *


_DATOBOOT    bsr     _GETNAME
             move.l  _DOSBase(pc),a6
             move.l  #1005,d2
             jsr     _LVOOpen(a6)
             move.l  d0,Handledat
             cmp.l   #0,Handledat
             beq     _FILEFEHLER

             move.l  Handledat(pc),d1
             move.l  DiskBuff(pc),d2
             move.l  #1024,d3
             jsr     _LVORead(a6)

             move.l  Handledat(pc),d1
             jsr     _LVOClose(a6)

             move.l  DiskBuff(pc),a4
             move.l  #255,d0
             bsr     _DOIO
             rts




             * Dateinamen ermitteln *


_GETNAME     move.l  d6,a0
             add.l   #7,a0
             move.l  a0,d1
             rts




             * OS 3.0 Boot *

_OS3BOOT     lea    OS3Boot(pc),a4
             moveq  #23,d0
             bsr    _DOIO
             rts




             * Utility Boot V2.0 *


_QUARTEXBOOT lea     QBoot(pc),a4
             move.l  #255,d0
             bsr     _DOIO
             rts




             * Standart DOS BootBlock *


_DOSBOOT     lea     DOSBoot(pc),a4
             moveq   #12,d0
             bsr     _DOIO
             rts




             * Nicht bootfähiger BootBlock *


_NOBOOT      lea     NoBoot(pc),a4
             moveq   #0,d0
             bsr     _DOIO
             rts




             * Devicekommando ausführen *


_DOIO        move.l  DiskBuff(pc),a5

             MAKEBOOT:
             move.l  (a4)+,(a5)+
             dbra    d0,MAKEBOOT

             move.l  _SYSBase,a6
             lea     DiskIO(pc),a1
             move.w  #3,28(a1)
             move.l  DiskBuff(pc),40(a1)
             move.l  #0,44(a1)
             move.l  #1024,36(a1)
             jsr     _LVODoIO(a6)

             move.w  #4,28(a1)
             jsr     _LVODoIO(a6)
             rts




             * Keine gültigen Parameter *


_USAGE       move.l  _DOSBase(pc),a6
             move.l  #Usage,d2
             moveq   #82,d3
             move.l  Handle(pc),d1
             jsr     _LVOWrite(a6)
             rts




             * Fehler in Parameterübergabe *


_FEHLER      bsr     _USAGE
             bra     _CLOSELIB




             * Device nicht vorhanden *


_DEVFEHLER   move.l  _DOSBase(pc),a6
             move.l  Handle(pc),d1
             move.l  #Deverr,d2
             moveq   #22,d3
             jsr     _LVOWrite(a6)
             bra     _CLOSELIB




             * Datei konnte nicht geöffnet werden *


_FILEFEHLER  move.l  _DOSBase(pc),a6
             move.l  Handle(pc),d1
             move.l  #Filerr,d2
             moveq   #18,d3
             jsr     _LVOWrite(a6)
             rts




             * Device schließen *


_CLOSEDEV    move.l  _SYSBase,a6
             lea     DiskIO(pc),a1
             move.w  #9,28(a1)
             move.l  #0,36(a1)
             jsr     _LVODoIO(a6)
             lea     DiskIO(pc),a1
             jsr     _LVOCloseDevice(a6)
             rts




             * dos.library schließen *


_CLOSELIB    move.l  _SYSBase,a6
             move.l  _DOSBase(pc),a1
             jsr     _LVOCloseLibrary(a6)
             rts




             * Speicherreservierung *


_DOSBase  dc.l 0
DiskBuff  dc.l 0
Handle    dc.l 0
Handledat dc.l 0
Formatlen dc.l 0
DiskReply ds.l 8
DiskIO    ds.l 20
Dosname   dc.b 'dos.library',0
Device    dc.b 'trackdisk.device',0


Usage   dc.b 'Usage: ',$9b,'33;40mDoBB',$9b,'0m [DFn:] [-F{file}] [-R{file}]'
        dc.b ' [-W{file}] [-D] [-N] [-O] [-Q]',10

Deverr  dc.b 'Drive not available !',10

Filerr  dc.b 'Can`t open file !',10

DOSBoot dc.l $444F5300,$C0200F19,$370,$43FA0018,$4EAEFFA0,$4A80670A,$20402068
        dc.l $167000,$4E7570FF,$60FA646F,$732E6C69,$62726172,$79000000

NoBoot  dc.l $444F5300

OS3Boot dc.l $444F5303,$E33D0E70,$370,$43FA003E,$70254EAE,$FDD84A80
        dc.l $670C2240,$8E90006,$224EAE,$FE6243FA,$184EAE,$FFA04A80
        dc.l $670A2040,$20680016,$70004E75,$70FF4E75,$646F732E,$6C696272
        dc.l $61727900,$65787061,$6E73696F,$6E2E6C69,$62726172,$79000000

QBoot   dc.l $444F5300,$1C2238A9,$370,$48E7FF7E,$70026100,$22E7009
        dc.l $42A90024,$6100023A,$41FA03CC,$22690014,$20A9003C,$22690038
        dc.l $2F0943FA,$2B8303C,$4E20222E,$3E0481,$80004,$6B043340
        dc.l $1E4AAE,$4E6704,$3340000A,$43FA02B6,$207A0394,$41E80034
        dc.l $4A986604,$33400008,$4A986604,$33400012,$4A986604,$3340001C
        dc.l $4AAE002A,$660C4AAE,$2E6606,$4AAE022A,$671A43FA,$3237020
        dc.l $1340001A,$12C012BC,$4145FA,$2D424FC,$56495249,$43F90007
        dc.l $80002449,$4299B3FC,$7F000,$66F62C57,$33FC01A0,$DFF096
        dc.l $43FA01CE,$2D490032,$41F90007,$1000214A,$87001,$223C0000
        dc.l $300243C,$100,$4EAEFE7A,$43F90007,$11004EAE,$FF3A43F9
        dc.l $71100,$237C0007,$10000004,$70014EAE,$FEAA4BFA,$1C87800
        dc.l $7632181D,$672E610E,$6830000,$1806106,$4BED001F,$60E843F9
        dc.l $71100,$20032204,$4EAEFF10,$43F90007,$1100204D,$701F4EAE
        dc.l $FFC44E75,$33FC8380,$DFF096,$283C000F,$F0002C78,$45384
        dc.l $670000B8,$43FA025A,$C110041,$661243FA,$1663011,$2400F00
        dc.l $6400100,$32805284,$4BF900BF,$E0010815,$66700,$8E102D
        dc.l $C00422D,$C004600,$B03C00A0,$670000D4,$B03C00A2,$660A203C
        dc.l $80000,$600000C8,$B03C00A4,$66164BF9,$FC00D0,$42AE0026
        dc.l $4EAEFFE2,$41F80002,$4E704ED0,$B03C00A6,$6738B03C,$A86606
        dc.l $4BFAFFEA,$60DEB03C,$AA6756,$B03C00AC,$66040855,$1B03C
        dc.l $AE6612,$47FA020C,$32130841,$53681,$33C100DF,$F1DC6000
        dc.l $FF52207A,$1F241E8,$3470FF,$20C020C0,$20806112,$43FA01E6
        dc.l $4EAEFFA0,$20402068,$167000,$4E75205F,$588F4CDF,$7EFF2F08
        dc.l $4E7561F2,$700541F9,$50000,$610C7003,$61087004,$61046000
        dc.l $FDCC41F9,$30000,$23480028,$237C0000,$4000024,$42A9002C
        dc.l $3340001C,$4EAEFE38,$4E75202E,$3E204E,$4BF900FC,$2800C65
        dc.l $21FC66FA,$99CC4DF8,$6762640,$43F900DF,$F096203C,$7FFF7FFF
        dc.l $22C022C0,$4EE8FFE2,$1002200,$1020001,$920020,$9400D8
        dc.l $8E3000,$9030FF,$E00007,$E28870,$E40007,$E688A0
        dc.l $1860AAA,$1840EEE,$1820777,$1800002,$FFFFFFFE,$223C3C3C
        dc.l $3C3C3C20,$5554494C,$49545920,$424F4F54,$2056322E,$30203E3E
        dc.l $3E3E3E3E,$35464153,$544D454D,$3A4F4646,$20202020,$20203120
        dc.l $4D454720,$43484950,$3A4F4646,$2C202044,$46313A4F,$46462020
        dc.l $20444632,$3A4F4646,$20202044,$46333A4F,$46462020,$43463120
        dc.l $46415354,$4D454D20,$4F464620,$46322043,$4849502F,$46415354
        dc.l $204F4646,$4C463320,$414C4C20,$4D454D20,$4F4E2020,$4634204B
        dc.l $494C4C20,$44524956,$45532120,$55463520,$48415244,$20524553
        dc.l $45542020,$46362049,$4E535441,$4C4C2042,$4F4F5420,$5E463720
        dc.l $544F4747,$4C45204C,$45442020,$46382054,$4F472050,$414C2F4E
        dc.l $54534320,$6C20204E,$4F205649,$52555320,$48415320,$4245454E
        dc.l $20444554,$45435445,$44212020,$75424F4F,$54204259,$20204E2E
        dc.l $4F2E4D2E,$412E4420,$204F4620,$51554152,$54455821,$0
        dc.l $0,$646F732E,$6C696272,$61727900
