amos-professional/compiler/+Header_Backstart.s
2020-04-26 02:58:13 +02:00

135 lines
3.5 KiB
ArmAsm
Raw Permalink Blame History

**********************************************************************
*
* Published under the MIT Licence
*
* Copyright (c) 1992 Europress Software
* Copyright (c) 2020 Francois Lionet
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
**********************************************************************
*
* HEADER BACKSTART Programme compile
*
* Ne pas changer le fichier sans verifier que c'est multiple
* de 8
*
**********************************************************************
*
dc.w FinBack-DebBack
*
DebBack move.l #0,d2
move.l #0,d3
BackStart
lea DebPrg(pc),a4
move.l a4,Header_DebPrg-DebPrg(a4)
; Recopie les parametres
move.l d2,ComD2-DebPrg(a4)
move.l d3,ComD3-DebPrg(a4)
; Recopie la ligne de commande
cmp.w #256,d0
bcs.s .skip
move.w #255,d0
.skip move.w d0,ComLong-DebPrg(a4)
lea ComLine-DebPrg(a4),a1
subq.w #1,d0
bmi.s .loopX
.loop move.b (a0)+,(a1)+
dbra d0,.loop
.loopX
; CLI ou WORKBENCH?
move.l $4.w,a6
sub.l a1,a1
jsr FindTask(a6)
move.l d0,a0
tst.l $ac(a0)
beq DDebPrg
; Ca vient du CLI: RUN BACK
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CliBack bset #FHead_Backed,ComD2+3-DebPrg(a4)
; Ouvre le DOS
moveq #0,d0
lea DosName(pc),a1
jsr OpenLib(a6)
move.l d0,a6
tst.l d0
beq.s BackX
; Coupe les segments
lea DDebPrg-8(pc),a2
move.l a2,a1
lea DebBack-8(pc),a0
move.l 4(a0),4(a2)
clr.l 4(a0)
sub.l a0,a1
move.l (a0),d0
move.l a1,(a0)
sub.l a1,d0
move.l d0,(a2)
; Adresse du debut du hunk
addq.l #4,a2
move.l a2,d3
addq.l #4,a2
move.l a2,Header_DebPrg-DebPrg(a4)
; Fait d<>marrer le processus
lsr.l #2,d3 Segments...
moveq #0,d2
lea FoNom(pc),a0
move.l a0,d1 Faux nom...
move.l #4096,d4 Taille de pile...
jsr -138(a6) Create Proc!
; Ferme le DOS
move.l a6,a1
move.l $4.w,a6
jsr CloseLib(a6)
; Fini!
BackX moveq #0,d0
rts
;---------------------------------------------------------------------
dc.l 0
ds.l 2
;---------------------------------------------------------------------
DDebPrg lea ComLine(pc),a0
move.w ComLong(pc),d0
lea DebPrg(pc),a4
move.l ComD2(pc),d2
move.l ComD3(pc),d3
bsr.s BackIn
move.l $4.w,a6
jsr Forbid(a6)
lea DDebPrg-4(pc),a1
move.l -(a1),d0
jsr FreeMem(a6)
moveq #0,d0
rts
;---------------------------------------------------------------------
Include "+Header.s"
;---------------------------------------------------------------------
ComLong dc.w 0
ComLine ds.b 256
ComD2 dc.l 0
ComD3 dc.l 0
FoNom dc.b "Backstart",0
even
;---------------------------------------------------------------------
FinBack dc.w 0