home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / Games / WHDLoad / Src / programs / SP.asm < prev    next >
Assembly Source File  |  2000-08-07  |  14KB  |  758 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    sp.asm
  3. ;  :Contents.    saves iff picture form dump file created by WHDLoad
  4. ;  :Author.    Bert Jahn
  5. ;  :EMail.    wepl@whdload.org
  6. ;  :Address.    Franz-Liszt-Straße 16, Rudolstadt, 07404, Germany
  7. ;  :Version.    $Id: sp.asm 1.4 2000/08/07 23:29:15 jah Exp $
  8. ;  :History.    13.07.98 started
  9. ;        03.08.98 reworked for new dump file
  10. ;        12.10.98 cskip added
  11. ;        17.01.99 recompile because error.i changed
  12. ;        15.03.99 cop/k and width/k added
  13. ;        08.08.00 argument for CopStop will be validated now
  14. ;             CopStop added to the copperlist dump
  15. ;  :Requires.    OS V37+
  16. ;  :Copyright.    © 1998-2000 Bert Jahn, All Rights Reserved
  17. ;  :Language.    68020 Assembler
  18. ;  :Translator.    Barfly 2.9
  19. ;---------------------------------------------------------------------------*
  20. ;##########################################################################
  21.  
  22.     INCDIR    Includes:
  23.     INCLUDE    lvo/exec.i
  24.     INCLUDE    exec/memory.i
  25.     INCLUDE    lvo/dos.i
  26.     INCLUDE    dos/dos.i
  27.     INCLUDE    hardware/custom.i
  28.     
  29.     INCLUDE    whddump.i
  30.     INCLUDE    macros/ntypes.i
  31.  
  32. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  33.  
  34. GL    EQUR    A4        ;a4 ptr to Globals
  35. LOC    EQUR    A5        ;a5 for local vars
  36.  
  37.     STRUCTURE    ArgArray,0
  38.         ULONG    aa_output
  39.         ULONG    aa_cop
  40.         ULONG    aa_copstop
  41.         ULONG    aa_width
  42.         ULONG    aa_height
  43.         ULONG    aa_con0
  44.         ULONG    aa_mod1
  45.         ULONG    aa_mod2
  46.         ULONG    aa_pt1
  47.         ULONG    aa_pt2
  48.         ULONG    aa_pt3
  49.         ULONG    aa_pt4
  50.         LABEL    aa_SIZEOF
  51.  
  52.     NSTRUCTURE    Globals,0
  53.         NAPTR    gl_execbase
  54.         NAPTR    gl_dosbase
  55.         NAPTR    gl_rdargs
  56.         NSTRUCT    gl_rdarray,aa_SIZEOF
  57.         NALIGNLONG
  58.         NLABEL    gl_SIZEOF
  59.  
  60. ;##########################################################################
  61.  
  62.     PURE
  63.     OUTPUT    C:SP
  64.     SECTION    "",CODE
  65.     MC68020
  66.  
  67. VER    MACRO
  68.         dc.b    "SP 1.1 "
  69.     DOSCMD    "WDate >t:date"
  70.     INCBIN    "t:date"
  71.         dc.b    " by Wepl"
  72.     ENDM
  73.  
  74.         bra    .start
  75.         dc.b    "$VER: "
  76.         VER
  77.         dc.b    " V37+",0
  78.     CNOP 0,2
  79. .start
  80.  
  81. ;##########################################################################
  82.  
  83.         link    GL,#gl_SIZEOF
  84.         move.l    (4).w,(gl_execbase,GL)
  85.         
  86.         move.l    #37,d0
  87.         lea    (_dosname),a1
  88.         move.l    (gl_execbase,GL),a6
  89.         jsr    _LVOOpenLibrary(a6)
  90.         move.l    d0,(gl_dosbase,GL)
  91.         beq    .nodoslib
  92.  
  93.         lea    (_ver),a0
  94.         bsr    _Print
  95.  
  96.         lea    (gl_rdarray,GL),a0
  97.         moveq    #aa_SIZEOF/4-1,d0
  98. .0        clr.l    (a0)+
  99.         dbf    d0,.0
  100.  
  101.         lea    (_template),a0
  102.         move.l    a0,d1
  103.         lea    (gl_rdarray,GL),a0
  104.         move.l    a0,d2
  105.         moveq    #0,d3
  106.         move.l    (gl_dosbase,GL),a6
  107.         jsr    (_LVOReadArgs,a6)
  108.         move.l    d0,(gl_rdargs,GL)
  109.         bne    .argsok
  110.         lea    (_readargs),a0
  111.         bsr    _PrintErrorDOS
  112.         bra    .noargs
  113. .argsok
  114.         move.l    (gl_rdarray+aa_copstop,GL),d0
  115.         beq    .copstop
  116.         move.l    d0,a0
  117.         bsr    _etoi
  118.         move.l    d0,(gl_rdarray+aa_copstop,GL)
  119.         ble    .copstoperr
  120.         tst.b    (a0)
  121.         beq    .copstop
  122. .copstoperr    lea    (_badcopstop),a0
  123.         bsr    _Print
  124.         bra    .opend
  125. .copstop
  126.  
  127.         bsr    _Main
  128. .opend
  129.         move.l    (gl_rdargs,GL),d1
  130.         move.l    (gl_dosbase,GL),a6
  131.         jsr    (_LVOFreeArgs,a6)
  132. .noargs
  133.         move.l    (gl_dosbase,GL),a1
  134.         move.l    (gl_execbase,GL),a6
  135.         jsr    (_LVOCloseLibrary,a6)
  136. .nodoslib
  137.         unlk    GL
  138.         moveq    #0,d0
  139.         rts
  140.  
  141. ;##########################################################################
  142.  
  143.     NSTRUCTURE    local_main,0
  144.         NAPTR    lm_fileptr
  145.         NULONG    lm_filesize
  146.         NAPTR    lm_header
  147.         NAPTR    lm_cust
  148.         NAPTR    lm_mem
  149.         NULONG    lm_cmapsize
  150.         NULONG    lm_bodysize
  151.         NULONG    lm_destptr
  152.         NSTRUCT    lm_colors,256*3
  153.         NWORD    lm_widthskip        ;amount of bytes which are displayed
  154.                         ;but will not be written to dest
  155.         NALIGNLONG
  156.         NLABEL    lm_SIZEOF
  157.  
  158. _Main        movem.l    d2-d7/a2-a3/a6,-(a7)
  159.         link    LOC,#lm_SIZEOF
  160.         
  161.         lea    (lm_colors,LOC),a0
  162.         moveq    #256*3/8-1,d0
  163. .clr4        clr.l    (a0)+
  164.         clr.l    (a0)+
  165.         dbf    d0,.clr4
  166.  
  167.         lea    (_name),a0
  168.         bsr    _LoadFileMsg
  169.         move.l    d1,(lm_filesize,LOC)
  170.         move.l    d0,(lm_fileptr,LOC)
  171.         beq    .afilefree
  172.  
  173.         clr.l    (lm_mem,LOC)
  174.         clr.l    (lm_cust,LOC)
  175.         clr.l    (lm_header,LOC)
  176.  
  177.         cmp.l    #20,d1
  178.         blt    .filefree
  179.  
  180.         move.l    d0,a0
  181.         cmp.l    #"FORM",(a0)+
  182.         bne    .filefree
  183.         subq.l    #8,d1
  184.         cmp.l    (a0)+,d1
  185.         bne    .filefree
  186.         cmp.l    #ID_WHDD,(a0)+
  187.         bne    .filefree
  188.         subq.l    #4,d1
  189. .idn        move.l    (a0)+,d0
  190.         move.l    (a0)+,d2
  191.         subq.l    #8,d1
  192.         bcs    .filefree
  193.         cmp.l    #ID_CUST,d0
  194.         bne    .id1
  195.         move.l    a0,(lm_cust,LOC)
  196. .id1        cmp.l    #ID_MEM,d0
  197.         bne    .id2
  198.         move.l    a0,(lm_mem,LOC)
  199. .id2        cmp.l    #ID_HEAD,d0
  200.         bne    .id3
  201.         move.l    a0,(lm_header,LOC)
  202. .id3        add.l    d2,a0
  203.         sub.l    d2,d1
  204.         bcs    .filefree
  205.         bne    .idn
  206.  
  207.         tst.l    (lm_mem,LOC)
  208.         beq    .filefree
  209.         tst.l    (lm_cust,LOC)
  210.         beq    .filefree
  211.         tst.l    (lm_header,LOC)
  212.         beq    .filefree
  213.  
  214.         move.l    (lm_header,LOC),a0
  215.         move.l    (wdh_BaseMemSize,a0),-(a7)
  216.         pea    (_mem_text)
  217.         bsr    _pf
  218.         addq.l    #8,a7
  219.  
  220.         move.l    (lm_cust,LOC),a3    ;A3 = custom
  221.  
  222.     ;copy color entries
  223.         lea    (color,a3),a0
  224.         lea    (lm_colors,LOC),a1
  225.         moveq    #31,d0
  226. .sc2        move.w    (a0)+,d1
  227.         bfextu    d1{20:4},d2
  228.         mulu    #$11,d2
  229.         move.b    d2,(a1)+
  230.         bfextu    d1{24:4},d2
  231.         mulu    #$11,d2
  232.         move.b    d2,(a1)+
  233.         bfextu    d1{28:4},d2
  234.         mulu    #$11,d2
  235.         move.b    d2,(a1)+
  236.         dbf    d0,.sc2
  237.  
  238.     ;print coplc's
  239.         movem.l    (cop1lc,a3),d0-d1
  240.         movem.l    d0-d1,-(a7)
  241.         pea    (_cop_text)
  242.         bsr    _pf
  243.         add.w    #12,a7
  244.     ;overwrite with arguments
  245.         move.l    (gl_rdarray+aa_cop,GL),d0
  246.         beq    .ncop
  247.         move.l    d0,a0
  248.         bsr    _etoi
  249.         move.l    d0,(cop1lc,a3)
  250. .ncop
  251.     ;dump copper lists
  252.         bsr    _cdis
  253.     ;move cop writes to custom table
  254.         bsr    _copwrite
  255.  
  256.     ;overwrite with arguments
  257.         bsr    _withargs
  258.  
  259.     ;depth
  260.         bfextu    (bplcon0,a3){1:3},d6
  261.         bne    .3
  262.         moveq    #8,d6            ;D6 = depth
  263. .3
  264.     ;height
  265.         bfextu    (diwstrt,a3){0:8},d0
  266.         bfextu    (diwstop,a3){0:8},d5
  267.         tst.b    d5
  268.         bmi    .4
  269.         add.w    #256,d5
  270. .4        sub.l    d0,d5            ;D5 = height
  271.  
  272.     ;width
  273.     ifeq 1
  274.         bfextu    (diwstrt,a3){8:8},d0
  275.         bfextu    (diwstop,a3){8:8},d4
  276.         add.w    #256,d4
  277.         sub.l    d0,d4            ;D4 = width
  278.     else
  279.         move.w    (ddfstop,a3),d4
  280.         sub.w    (ddfstrt,a3),d4
  281.         addq.w    #8,d4
  282.         add.w    d4,d4            ;D4 = width
  283.     endc
  284.         tst.b    (bplcon0,a3)
  285.         bpl    .lores
  286.         add.w    d4,d4
  287. .lores
  288.         move.l    (gl_rdarray+aa_height,GL),d0
  289.         beq    .h
  290.         move.l    d0,a0
  291.         bsr    _etoi
  292.         move.l    d0,d5
  293. .h
  294.         move.w    d4,(lm_widthskip,LOC)
  295.         move.l    (gl_rdarray+aa_width,GL),d0
  296.         beq    .w
  297.         move.l    d0,a0
  298.         bsr    _etoi
  299.         move.l    d0,d4
  300. .w        move.w    (lm_widthskip,LOC),d0
  301.         sub.w    d4,d0
  302.         asr.w    #3,d0
  303.         move.w    d0,(lm_widthskip,LOC)
  304.  
  305.     ;calc pic size
  306.     ;FORM+ILBM
  307.         moveq    #12,d7
  308.     ;BMHD
  309.         add.l    #28,d7
  310.     ;CAMG
  311.         add.l    #12,d7
  312.     ;CMAP
  313.         moveq    #1,d0
  314.         lsl.l    d6,d0
  315.         mulu    #3,d0
  316.         move.l    d0,(lm_cmapsize,LOC)
  317.         add.l    d0,d7
  318.         addq.l    #8,d7
  319.     ;BODY
  320.         move.l    d4,d0
  321.         add.w    #15,d0
  322.         lsr.l    #4,d0
  323.         add.l    d0,d0
  324.         mulu    d6,d0
  325.         mulu    d5,d0
  326.         move.l    d0,(lm_bodysize,LOC)
  327.         add.l    d0,d7
  328.         addq.l    #8,d7
  329.  
  330.         movem.l    d4-d6,-(a7)
  331.         pea    _dim_text
  332.         bsr    _pf
  333.         add.w    #16,a7
  334.         
  335.         tst.w    d4
  336.         beq    .adestfree
  337.         tst.w    d5
  338.         beq    .adestfree
  339.         tst.w    d6
  340.         beq    .adestfree
  341.  
  342.     ;get mem
  343.         move.l    d7,d0
  344.         moveq    #MEMF_ANY,d1
  345.         move.l    (gl_execbase,GL),a6
  346.         jsr    (_LVOAllocVec,a6)
  347.         move.l    d0,(lm_destptr,LOC)
  348.         bne    .memok
  349.         moveq    #0,d0
  350.         lea    (_nomem),a0
  351.         sub.l    a1,a1
  352.         bsr    _PrintError
  353.         bra    .adestfree
  354. .memok
  355.         move.l    d0,a2
  356.         move.l    #"FORM",(a2)+
  357.         move.l    d7,(a2)
  358.         subq.l    #8,(a2)+
  359.         move.l    #"ILBM",(a2)+
  360.     ;BMHD
  361.         move.l    #"BMHD",(a2)+
  362.         move.l    #20,(a2)+
  363.         move.w    d4,(a2)+
  364.         move.w    d5,(a2)+
  365.         clr.l    (a2)+            ;xpos,ypos
  366.         move.w    d6,d0
  367.         move.b    d0,(a2)+
  368.         clr.b    (a2)+            ;mask
  369.         clr.b    (a2)+            ;compression
  370.         clr.b    (a2)+            ;pad
  371.         clr.w    (a2)+            ;trans col
  372.         move.b    #10,(a2)+        ;x aspect
  373.         move.b    #11,(a2)+        ;y aspect
  374.         move.w    d4,(a2)+        ;screen
  375.         move.w    d5,(a2)+
  376.     ;CAMG
  377.         move.l    #"CAMG",(a2)+
  378.         move.l    #4,(a2)+
  379.         clr.w    (a2)+
  380.         move.w    (bplcon0,a3),(a2)+
  381.     ;CMAP
  382.         move.l    #"CMAP",(a2)+
  383.         move.l    (lm_cmapsize,LOC),d2
  384.         move.l    d2,(a2)+
  385.         lea    (lm_colors,LOC),a0
  386. .cmap        move.w    (a0)+,(a2)+
  387.         subq.l    #2,d2
  388.         bne    .cmap
  389.     ;BODY
  390.         move.l    #"BODY",(a2)+
  391.         move.l    (lm_bodysize,LOC),(a2)+
  392.         moveq    #0,d3            ;d3 = plane
  393.  
  394.         move.w    d5,d3            ;height
  395.  
  396. .9        lea    (bplpt,a3),a0
  397.         move.w    d6,d1            ;depth
  398. .8        move.l    (a0),a1
  399.         add.l    (lm_mem,LOC),a1
  400.         move.w    d4,d0            ;width
  401.         add.w    #15,d0
  402.         lsr.w    #4,d0
  403. .7        move.w    (a1)+,(a2)+
  404.         subq.w    #1,d0
  405.         bne    .7
  406.         sub.l    (lm_mem,LOC),a1
  407.         move.l    a1,(a0)+
  408.         subq.w    #1,d1
  409.         bne    .8
  410.         
  411.         movem.w    (bpl1mod,a3),d0-d1
  412.         lea    (bplpt,a3),a0
  413.         moveq    #4-1,d2
  414. .6        move.l    (a0),a1
  415.         add.w    d0,a1
  416.         add.w    (lm_widthskip,LOC),a1
  417.         move.l    a1,(a0)+
  418.         move.l    (a0),a1
  419.         add.w    d1,a1
  420.         add.w    (lm_widthskip,LOC),a1
  421.         move.l    a1,(a0)+
  422.         dbf    d2,.6
  423.         
  424.         subq.w    #1,d3
  425.         bne    .9
  426.  
  427.         move.l    d7,d0
  428.         move.l    (lm_destptr,LOC),a0
  429.         move.l    (gl_rdarray+aa_output,GL),d1
  430.         move.l    d1,a1
  431.         bsr    _SaveFileMsg
  432.  
  433.         move.l    (lm_destptr,LOC),a1
  434.         move.l    (gl_execbase,GL),a6
  435.         jsr    (_LVOFreeVec,a6)
  436. .adestfree
  437. .filefree
  438.         move.l    (lm_fileptr,LOC),a1
  439.         move.l    (gl_execbase,GL),a6
  440.         jsr    (_LVOFreeVec,a6)
  441. .afilefree
  442.         unlk    LOC
  443.         movem.l    (a7)+,d2-d7/a2-a3/a6
  444.         rts
  445.  
  446. ;##########################################################################
  447.  
  448. _cdis        moveq    #0,d4
  449.         move.l    (cop1lc,a3),d5        ;d5 = lc1
  450.         move.l    (cop2lc,a3),d6        ;d6 = lc2
  451.  
  452. .j1        move.l    d5,a0
  453. .nlc        addq.l    #1,d4
  454.         add.l    (lm_mem,LOC),a0
  455.         
  456.         move.l    d4,-(a7)
  457.         pea    (_copdump_text)
  458.         bsr    _pf
  459.         add.l    #8,a7
  460.  
  461. .next        bsr    _pa
  462.         cmp.l    #-2,(a0)
  463.         beq    .e
  464.         movem.w    (a0)+,d0-d1
  465.         btst    #0,d0
  466.         beq    .m
  467.         btst    #0,d1
  468.         beq    .w
  469.  
  470. .s        lsr.w    #1,d0
  471.         ext.l    d0
  472.         ror.l    #7,d0
  473.         lsl.w    #7,d0
  474.         lsr.l    #7,d0
  475.         move.l    d0,-(a7)
  476.         pea    .cskip
  477.         bsr    _pf
  478.         addq.l    #8,a7
  479.         bra    .next
  480.  
  481. .w        lsr.w    #1,d0
  482.         ext.l    d0
  483.         ror.l    #7,d0
  484.         lsl.w    #7,d0
  485.         lsr.l    #7,d0
  486.         move.l    d0,-(a7)
  487.         pea    .cwait
  488.         bsr    _pf
  489.         addq.l    #8,a7
  490.         bra    .next
  491.  
  492. .m        addq.w    #2,d0
  493.         cmp.w    (a0),d0
  494.         beq    .lm
  495.         subq.w    #2,d0
  496.         move.w    d0,-(a7)
  497.         move.w    d1,-(a7)
  498.         pea    .cmove
  499.         bsr    _pf
  500.         addq.l    #8,a7
  501.         bsr    _pc
  502.         cmp.w    #fmode,d0
  503.         bhi    .fail
  504.         cmp.w    #copjmp1,d0
  505.         beq    .j1
  506.         cmp.w    #copjmp2,d0
  507.         bne    .next
  508.         move.l    d6,a0
  509.         bra    .nlc
  510.  
  511. .lm        subq.w    #2,d0
  512.         addq.l    #2,a0
  513.         move.w    d0,d2
  514.         move.w    d1,d0
  515.         move.w    (a0)+,d1
  516.         movem.w    d0-d3,-(a7)
  517.         cmp.w    #cop1lc,d2
  518.         bne    .lm1
  519.         move.l    (a7),d5
  520. .lm1        cmp.w    #cop2lc,d2
  521.         bne    .lm2
  522.         move.l    (a7),d6
  523. .lm2        pea    .clmove
  524.         bsr    _pf
  525.         add.w    #12,a7
  526.         move.w    d2,d0
  527.         bsr    _pc
  528.         bra    .next
  529.  
  530. .e        pea    .cend
  531.         bsr    _p
  532.  
  533. .q        moveq    #-1,d0
  534.         rts
  535.  
  536. .fail        moveq    #0,d0
  537.         rts
  538.  
  539. .cend        dc.b    "CEND",10,0
  540. .cmove        dc.b    "CMOVE    #$%04x,$%04x    ",0
  541. .clmove        dc.b    "CLMOVE    #$%08lx,$%04x",0
  542. .cwait        dc.b    "CWAIT    %d,%d",10,0
  543. .cskip        dc.b    "CSKIP    %d,%d",10,0
  544.     EVEN
  545.  
  546. ;print address
  547. _pa        movem.l    d0-d1/a0-a1,-(a7)
  548.         sub.l    (lm_mem,LOC),a0
  549.         cmp.l    (gl_rdarray+aa_copstop,GL),a0
  550.         bne    .s
  551.         lea    .cs,a0
  552.         bsr    _Print
  553.         movem.l    (a7),_MOVEMREGS
  554.         sub.l    (lm_mem,LOC),a0
  555. .s        move.l    a0,-(a7)
  556.         pea    .1
  557.         bsr    _pf
  558.         addq.l    #8,a7
  559.         movem.l    (a7)+,_MOVEMREGS
  560.         rts
  561. .1        dc.b    "$%06lx ",0
  562. .cs        dc.b    "*** copstop ***",10,0
  563.     EVEN
  564.  
  565. ;print string
  566. _p        movem.l    d0-d1/a0-a1,-(a7)
  567.         move.l    (20,a7),a0
  568.         bsr    _PrintArgs
  569.         movem.l    (a7)+,_MOVEMREGS
  570.         rtd    #4
  571.  
  572. ;printf
  573. _pf        movem.l    d0-d1/a0-a1,-(a7)
  574.         move.l    (20,a7),a0
  575.         lea    (24,a7),a1
  576.         bsr    _PrintArgs
  577.         movem.l    (a7)+,_MOVEMREGS
  578.         rts
  579.  
  580. ;print custom
  581. _pc        movem.l    d0-d1/a0-a1,-(a7)
  582.         bsr    _GetCustomName
  583.         move.l    d0,-(a7)
  584.         pea    .2
  585.         bne    .1
  586.         addq.l    #4,a7
  587.         pea    .3
  588. .1        bsr    _pf
  589.         addq.l    #8,a7
  590.         movem.l    (a7)+,_MOVEMREGS
  591.         rts
  592.  
  593. .2        dc.b    "    ;%s"
  594. .3        dc.b    10,0
  595.     EVEN
  596.  
  597. ;##########################################################################
  598.  
  599. _copwrite    moveq    #-1,d5
  600.         move.l    (gl_rdarray+aa_copstop,GL),d0
  601.         beq    .cse
  602.         move.l    d0,d5
  603.         add.l    (lm_mem,LOC),d5
  604. .cse
  605. .j1        move.l    (cop1lc,a3),a0
  606. .off        add.l    (lm_mem,LOC),a0
  607.  
  608. .c1n        cmp.l    #-2,(a0)
  609.         beq    .c1e
  610.         cmp.l    d5,a0
  611.         beq    .c1e
  612.         movem.w    (a0)+,d0-d1
  613.         btst    #0,d0
  614.         bne    .c1n
  615.         cmp.w    #copjmp1,d0
  616.         beq    .j1
  617.         cmp.w    #copjmp2,d0
  618.         bne    .c
  619.         move.l    (cop2lc,a3),a0
  620.         bra    .off
  621.         
  622. .c        cmp.w    #color,d0
  623.         blo    .c1u
  624.         cmp.w    #color+62,d0
  625.         bhi    .c1u
  626.  
  627.     ;color register
  628.         bfextu    (bplcon3,a3){0:3},d2    ;bank
  629.         mulu    #256/8*3,d2
  630.         lea    (lm_colors.w,LOC,d2.w),a1
  631.         sub.w    #color,d0
  632.         lsr.w    #1,d0
  633.         mulu    #3,d0
  634.         add.w    d0,a1
  635.         bfextu    d1{20:4},d2
  636.         mulu    #$11,d2
  637.         bfextu    d1{24:4},d3
  638.         mulu    #$11,d3
  639.         bfextu    d1{28:4},d4
  640.         mulu    #$11,d4
  641.         btst    #9,(bplcon3,a3)        ;LOCT ?
  642.         bne    .c1l
  643.         move.b    d2,(a1)+
  644.         move.b    d3,(a1)+
  645.         move.b    d4,(a1)
  646.         bra    .c1n
  647. .c1l        bfins    d2,(a1){4:4}
  648.         bfins    d3,(1,a1){4:4}
  649.         bfins    d4,(2,a1){4:4}
  650.         bra    .c1n
  651.  
  652. .c1u        move.w    d1,(a3,d0.w)
  653.         or.w    #$8080,($200.w,a3,d0.w)
  654.         bra    .c1n
  655. .c1e
  656.         rts
  657.  
  658. ;##########################################################################
  659.  
  660. _withargs
  661.         move.l    (gl_rdarray+aa_con0,GL),d0
  662.         beq    .0
  663.         move.l    d0,a0
  664.         bsr    _etoi
  665.         move.w    d0,(bplcon0,a3)
  666. .0
  667.         move.l    (gl_rdarray+aa_mod1,GL),d0
  668.         beq    .1
  669.         move.l    d0,a0
  670.         bsr    _etoi
  671.         move.w    d0,(bpl1mod,a3)
  672. .1        move.l    (gl_rdarray+aa_mod2,GL),d0
  673.         beq    .2
  674.         move.l    d0,a0
  675.         bsr    _etoi
  676.         move.w    d0,(bpl2mod,a3)
  677. .2
  678.         move.l    (gl_rdarray+aa_pt1,GL),d0
  679.         beq    .p1
  680.         move.l    d0,a0
  681.         bsr    _etoi
  682.         move.l    d0,(bplpt,a3)
  683. .p1        move.l    (gl_rdarray+aa_pt2,GL),d0
  684.         beq    .p2
  685.         move.l    d0,a0
  686.         bsr    _etoi
  687.         move.l    d0,(bplpt+4,a3)
  688. .p2        move.l    (gl_rdarray+aa_pt3,GL),d0
  689.         beq    .p3
  690.         move.l    d0,a0
  691.         bsr    _etoi
  692.         move.l    d0,(bplpt+8,a3)
  693. .p3        move.l    (gl_rdarray+aa_pt4,GL),d0
  694.         beq    .p4
  695.         move.l    d0,a0
  696.         bsr    _etoi
  697.         move.l    d0,(bplpt+12,a3)
  698. .p4
  699.         rts
  700.  
  701. ;##########################################################################
  702.  
  703.     INCDIR    Sources:
  704.     INCLUDE    dosio.i
  705.         PrintArgs
  706.         Print
  707.     INCLUDE    error.i
  708.         PrintErrorDOS
  709.     INCLUDE    files.i
  710.         LoadFileMsg
  711.         SaveFileMsg
  712.     INCLUDE    hardware.i
  713.         GetCustomName
  714.     INCLUDE    strings.i
  715.         etoi
  716.  
  717. ;##########################################################################
  718.  
  719. _name        dc.b    ".whdl_dump",0
  720.  
  721. _mem_text    dc.b    "BaseMemSize=$%lx",10,0
  722. _cop_text    dc.b    "cop1lc=$%lx cop2lc=$%lx",10,0
  723. _copdump_text    dc.b    "*** copperlist %ld ***",10,0
  724. _badci_text    dc.b    "bad copper instruction: %8lx",10,0
  725. _dim_text    dc.b    "width=%ld height=%ld depth=%ld",10,0
  726.  
  727. ; Errors
  728. _nomem        dc.b    "not enough free store",0
  729. _badcopstop    dc.b    "invalid argument for CopStop",10,0
  730.  
  731. ; Operationen
  732. _readargs    dc.b    "read arguments",0
  733.  
  734. ;subsystems
  735. _dosname    dc.b    "dos.library",0
  736.  
  737. _template    dc.b    "OutputFile/A"
  738.         dc.b    ",Cop/K"
  739.         dc.b    ",CS=CopStop/K"
  740.         dc.b    ",Width/K"
  741.         dc.b    ",Height/K"
  742.         dc.b    ",con0/K"
  743.         dc.b    ",mod1/K"
  744.         dc.b    ",mod2/K"
  745.         dc.b    ",pt1/K"
  746.         dc.b    ",pt2/K"
  747.         dc.b    ",pt3/K"
  748.         dc.b    ",pt4/K"
  749.         dc.b    0
  750.  
  751. _ver        VER
  752.         dc.b    10,0
  753.  
  754. ;##########################################################################
  755.  
  756.     END
  757.  
  758.