;*********************************************
;*                 DoBB V1.05                *
;*  Installiert nach Option einen BootBlock  *
;*     Sprache: Kuma-Seka Assembler V3.0     *
;*          © 1992 Volker Stepprath          *
;*********************************************


;**** VARIABLEN DEFINIEREN *************
ExecBase    =    4
Open        = - 30
Close       = - 36
Read        = - 42
Write       = - 48
AllocMem    = -198
FreeMem     = -210
FindTask    = -294
OpenLib     = -408
CloseLib    = -414
OpenDevice  = -444
CloseDevice = -450
DoIO        = -456
;***************************************


;**** PARAMETERTEST ********************
Cmp.l   #7,D0
Ble     xFEHLER
Cmp.b   #58,3(A0)
Bne     xFEHLER
Move.b  2(A0),D4
Sub.b   #48,D4
Cmp.b   #0,D4
Blt     xFEHLER
Cmp.b   #3,D4
Bgt     xFEHLER
;***************************************


;**** PARAMETER RETTEN *****************
Move.l  A0,D6
Move.l  D0,D7
;***************************************


;**** HAUPTPROGRAMM ********************
xMAIN:
        Jsr     xOPENLIB
        Jsr     xOPEN

        Jsr     xOPENDEV
        Cmp.l   #0,D0
        Bne     xDEVFEHLER

        Jsr     xALLOCMEM
        Jsr     xBOOTBLOCK
        Jsr     xFREEMEM

        Jsr     xCLOSEDEV
        Jsr     xCLOSE
        Jsr     xCLOSELIB
Rts     ;*******************************


;**** LIBRARY ÖFFNEN *******************
xOPENLIB:
        Move.l  ExecBase,A6
        Lea     DOSNAME,A1
        Move.l  #0,D0
        Jsr     OpenLib(A6)
        Move.l  D0,DOSBASE
Rts     ;*******************************


;**** FENSTER ÖFFNEN *******************
xOPEN:
        Move.l  DOSBASE,A6
        Move.l  #FENSTER,D1
        Move.l  #1005,D2
        Jsr     Open(A6)
        Move.l  D0,HANDLE
Rts     ;*******************************


;**** DEVICE ÖFFNEN ********************
xOPENDEV:
        Move.l  ExecBase,A6
        Sub.l   A1,A1
        Jsr     FindTask(A6)
        Move.l  D0,DISKREP+$10
        Lea     DISKIO,A1
        Move.l  #DISKREP,14(A1)
        Clr.l   D1
        Move.l  D4,D0
        Lea     DEVICE,A0
        Jsr     OpenDevice(A6)
Rts     ;*******************************


;**** SPEICHER RESERVIEREN *************
xALLOCMEM:
        Move.l  ExecBase,A6
        Move.l  #1024,D0
        Move.l  #$10003,D1
        Jsr     AllocMem(A6)
        Move.l  D0,DISKBUFF
Rts     ;*******************************


;**** SPEICHER LÖSCHEN *****************
xFREEMEM:
        Move.l  ExecBase,A6
        Move.l  #1024,D0
        Move.l  DISKBUFF,A1
        Jsr     FreeMem(A6)
Rts     ;*******************************


;**** BOOTBLOCKDATEN INSTALLIEREN ******
xBOOTBLOCK:
        Move.l  D6,A0
        Add.b   #3,(A0)

        ;**** - ************
        Cmp.b   #45,5(A0)
        Bne     xUSAGE

        ;**** S ************
        Cmp.b   #83,6(A0)
        Beq     xBOOTODAT
        Cmp.b   #115,6(A0)
        Beq     xBOOTODAT

        ;**** L ************
        Cmp.b   #76,6(A0)
        Beq     xDATOBOOT
        Cmp.b   #108,6(A0)
        Beq     xDATOBOOT

        ;**** N ************
        Cmp.b   #78,6(A0)
        Beq     xNOBOOT
        Cmp.b   #110,6(A0)
        Beq     xNOBOOT

        ;**** D ************
        Cmp.b   #68,6(A0)
        Beq     xDOSBOOT
        Cmp.b   #100,6(A0)
        Beq     xDOSBOOT

        ;**** Q ************
        Cmp.b   #81,6(A0)
        Beq     xQUARTEXBOOT
        Cmp.b   #113,6(A0)
        Beq     xQUARTEXBOOT

Jmp     xUSAGE  ;***********************


;**** BOOTBLOCK IN DATEI EINLESEN ******
xBOOTODAT:
        Move.l  ExecBase,A6
        Lea     DISKIO,A1
        Move    #2,28(A1)
        Move.l  DISKBUFF,40(A1)
        Move.l  #1024,36(A1)
        Move.l  #0,44(A1)
        Jsr     DoIO(A6)

        Jsr     xGETNAME
        Move.l  DOSBASE,A6
        Move.l  #1006,D2
        Jsr     Open(A6)
        Move.l  D0,HANDLEDAT
        Cmp.l   #0,HANDLEDAT
        Beq     xFILEFEHLER

        Move.l  HANDLEDAT,D1
        Move.l  DISKBUFF,D2
        Move.l  #1024,D3
        Jsr     Write(A6)

        Move.l  HANDLEDAT,D1
        Jsr     Close(A6)
Rts     ;*******************************


;**** DATEI IN BOOTBLOCK SCHREIBEN *****
xDATOBOOT:
        Jsr     xGETNAME
        Move.l  DOSBASE,A6
        Move.l  #1005,D2
        Jsr     Open(A6)
        Move.l  D0,HANDLEDAT
        Cmp.l   #0,HANDLEDAT
        Beq     xFILEFEHLER

        Move.l  HANDLEDAT,D1
        Move.l  DISKBUFF,D2
        Move.l  #1024,D3
        Jsr     Read(A6)

        Move.l  HANDLEDAT,D1
        Jsr     Close(A6)

        Move.l  DISKBUFF,A4
        Move.l  #255,D0
        Jsr     xDOIO
Rts     ;*******************************


;**** UTILITY BOOT V2.0 ****************
xQUARTEXBOOT:
        Lea     QUARTEXBOOT,A4
        Move.l  #255,D0
        Jsr     xDoIO
Rts     ;*******************************


;**** STANDART DOS BOOT ****************
xDOSBOOT:
        Lea     DOSBOOT,A4
        Move.l  #12,D0
        Jsr     xDoIO
Rts     ;*******************************


;**** NO BOOT **************************
xNOBOOT:
        Lea     NOBOOT,A4
        Move.l  #0,D0
        Jsr     xDoIO
Rts     ;*******************************


;**** DEVICEKOMMANDO AUSFÜHREN *********
xDOIO:
        Move.l  DISKBUFF,A5

        MAKEBOOT:
        Move.l  (A4)+,(A5)+
        Dbra    D0,MAKEBOOT

        Move.l  ExecBase,A6
        Lea     DISKIO,A1
        Move    #3,28(A1)
        Move.l  DISKBUFF,40(A1)
        Move.l  #0,44(A1)
        Move.l  #1024,36(A1)
        Jsr     DoIO(A6)

        Move    #4,28(A1)
        Jsr     DoIO(A6)
Rts     ;*******************************


;**** DATEINAMEN ERMITTELN *************
xGETNAME:
        Move.l  D6,A0
        Add.l   #8,A0
        Sub.b   #8,D7
        Move.l  A0,D2
        Move.l  D7,D3
        Add.l   D2,D3
        Sub.l   #1,D3
        Move.l  D3,A0
        Move.b  #0,(A0)
        Move.l  D2,D1
Rts     ;*******************************


;**** KEINE GÜLTIGEN PARAMETER *********
xUSAGE:
        Move.l  DOSBASE,A6
        Move.l  #USAGE,D2
        Move.l  #USAGEEND,D3
        Sub.l   D2,D3
        Move.l  HANDLE,D1
        Jsr     Write(A6)
Rts     ;*******************************


;**** PARAMETETFEHLER ******************
xFEHLER:
        Jsr     xOPENLIB
        Jsr     xOPEN
        Jsr     xUSAGE
        Jsr     xCLOSE
        Jsr     xCLOSELIB
Rts     ;*******************************


;**** DRIVE NICHT VORHANDEN ************
xDEVFEHLER:
        Move.l  DOSBASE,A6
        Move.l  HANDLE,D1
        Move.l  #DEVERR,D2
        Move.l  #DEVERREND,D3
        Sub.l   D2,D3
        Jsr     Write(A6)
        Jsr     xCLOSE
        Jsr     xCLOSELIB
Rts     ;*******************************


;**** DATEI WURDE NICHT GEÖFFNET *******
xFILEFEHLER:
        Move.l  DOSBASE,A6
        Move.l  HANDLE,D1
        Move.l  #FILERR,D2
        Move.l  #FILERREND,D3
        Sub.l   D2,D3
        Jsr     Write(A6)
Rts     ;*******************************


;**** DATEI SCHLIEßEN ******************
xCLOSE:
        Move.l  DOSBASE,A6
        Move.l  HANDLE,D1
        Jsr     Close(A6)
Rts     ;*******************************


;**** DEVICE SCHLIEßEN *****************
xCLOSEDEV:
        Move.l  ExecBase,A6
        Lea     DISKIO,A1
        Move    #9,28(A1)
        Move.l  #0,36(A1)
        Jsr     DoIO(A6)
        Lea     DISKIO,A1
        Jsr     CloseDevice(A6)
Rts     ;*******************************


;**** LIBRARY SCHLIEßEN ****************
xCLOSELIB:
        Move.l  ExecBase,A6
        Move.l  DOSBASE,A1
        Jsr     CloseLib(A6)
Rts     ;*******************************


;**** SPEICHERRESERVIERUNG *************
DOSNAME:        Dc.b `dos.library`,0

Even
DEVICE:         Dc.b `trackdisk.device`,0

Even
DOSBASE:        Dc.l 0

DISKIO:         Blk.l 20,0

DISKREP:        Blk.l 8,0

DISKBUFF:       Dc.l 0

FENSTER:        Dc.b `*`,0

HANDLE:         Dc.l 0

HANDLEDAT:      Dc.l 0

USAGE:
Dc.b "USAGE: ",$9b,"33;40mDoBB",$9b,"0m [DRIVE] [-S FILE] [-L FILE] "
Dc.b "[-N] [-D] [-Q]",10
USAGEEND:

DEVERR:
Dc.b "Drive not available !",10
DEVERREND:

FILERR:
Dc.b "Can`t open file !",10
FILERREND:

Even
DOSBOOT:
Dc.l $444F5300,$C0200F19,$370,$43FA0018,$4EAEFFA0,$4A80670A,$20402068
Dc.l $167000,$4E7570FF,$60FA646F,$732E6C69,$62726172,$79000000

NOBOOT:
Dc.l $444F5300

QUARTEXBOOT:
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
