home *** CD-ROM | disk | FTP | other *** search
/ Supremacy 2 / Supremacy-2.iso / Pompey / PP_031.MSA / AUTOMATI.ON / SOURCE / JEK.S < prev    next >
Text File  |  1985-11-20  |  10KB  |  638 lines

  1. ;this will only compile properly under GENST because the register
  2. ;lists are different for MOVEM!!
  3.  
  4. YES        equ    1
  5. NO        equ    0
  6. LSEEKROUTINE    EQU     YES
  7. SFIRSTROUTINE    EQU    YES
  8. COLFLASH    EQU    YES
  9. HEADING        EQU    YES        ;CREDITS
  10. FILECHECK    EQU    YES        
  11. COPYDOWN    EQU    NO
  12. HALFMEGBUF    EQU    NO
  13. DECRUNBUF     EQU    $9620
  14. HALFMEGBUFPOS    EQU    $78000
  15.  
  16. PROGSTART:
  17.  BRA CODESTART
  18.  
  19. FNAME: DC.B 'PARROT2',$00
  20. NULL: DC.L $00
  21.  
  22.  IFNE HEADING
  23. MYTEXT:
  24.  DC.B $1B,$45
  25.        ;1234567890123456789012345678901234567890
  26.   DC.B "VAPOUR PRESENTS . . .",0
  27.  ENDC
  28.  EVEN
  29.  
  30. CODESTART:
  31.  IFEQ COPYDOWN
  32.  MOVEA.L A7,A5
  33.  LEA PROGSTART(PC),A7
  34.  MOVEA.L $0004(A5),A5
  35.  MOVE.L  $000C(A5),D0
  36.  ADDI.L  #$00000100,D0
  37.  MOVE.L  D0,-(A7)
  38.  MOVE.L  A5,-(A7)
  39.  MOVE.W  #$0000,-(A7)
  40.  MOVE.W  #$004A,-(A7)
  41.  TRAP    #1
  42.  ADDA.L  #$0000000C,A7
  43.  ENDC
  44.  
  45.  IFNE COPYDOWN
  46.  MOVEA.L A7,A5
  47.  LEA PROGSTART(PC),A7
  48.  MOVEA.L $0004(A5),A5
  49.  MOVE.L  #$00000300,D0
  50.  MOVE.L  D0,-(A7)
  51.  MOVE.L  A5,-(A7)
  52.  MOVE.W  #$0000,-(A7)
  53.  MOVE.W  #$004A,-(A7)
  54.  TRAP    #1
  55.  ADDA.L  #$0000000C,A7
  56.  ENDC
  57.  
  58.  clr.l -(sp)
  59.  move.w #$20,-(sp)
  60.  trap #1
  61.  addq.l #6,sp
  62.  move.l d0,d7
  63.  
  64.  IFNE HALFMEGBUF
  65.  move.w $42e,d0
  66.  cmp.w #$0008,d0
  67.  bne.s onemeg
  68.  lea decrunloc(pc),a0
  69.  move.l #HALFMEGBUFPOS,(a0)         ;temporary!!!
  70.  bra.s afteronemeg
  71.  ENDC
  72.  
  73. onemeg:
  74.  move.l #DECRUNBUF,-(sp)
  75.  move.w #$48,-(sp)
  76.  trap #1
  77.  addq.l #6,sp
  78.  lea decrunloc(pc),a0
  79.  move.l d0,(a0)
  80.  
  81. afteronemeg:
  82.  lea oldtrap1vector(pc),a0
  83.  move.l $84,(a0)
  84.  
  85.  lea trapit(pc),a0
  86.  
  87.  IFEQ COPYDOWN
  88.  move.l a0,$84
  89.  ENDC
  90.  
  91.  IFNE COPYDOWN
  92.  sub.l #$700,d7
  93.  move.l d7,a1    ;destination
  94.  lea endofroutine(pc),a2
  95. keepgoing:
  96.  move.l (a0)+,(a1)+
  97.  cmp.l a2,a0
  98.  ble.s keepgoing
  99.  move.l d7,$84
  100.  ENDC
  101.  
  102.  IFNE HEADING
  103.  PEA MYTEXT(PC)
  104.  MOVE.W #$09,-(SP)
  105.  TRAP   #1
  106.  ADDQ.L #6,SP
  107.  ENDC
  108.  
  109.  move.l d7,-(sp)
  110.  move.w #$20,-(sp)
  111.  trap #1
  112.  addq.l #6,sp
  113.  
  114.  PEA NULL(PC)
  115.  PEA NULL(PC)
  116.  PEA FNAME(PC)
  117.  MOVE.W #0,-(SP)
  118.  MOVE.W #$4B,-(SP)
  119.  TRAP #1
  120.  add.l #14,sp
  121.  
  122.  clr.l -(sp)
  123.  move.w #$20,-(sp)
  124.  trap #1
  125.  addq.l #6,sp
  126.  
  127.  move.l oldtrap1vector(pc),$84
  128.  
  129.  move.l d0,-(sp)
  130.  move.w #$20,-(sp)
  131.  trap #1
  132.  addq.l #6,sp
  133.  
  134.  clr.w -(sp)
  135.  trap #1
  136.  
  137. trapit:
  138.  move.l a1,-(sp)
  139.  lea a0save(pc),a1
  140.  move.l a0,(a1)
  141.  move.l (sp)+,a1
  142.  btst #$05,(a7)
  143.  bne.S super
  144.  move.l usp,a0
  145.  bra.S after
  146. super:
  147.  move.l a7,a0
  148.  addq.l #6,a0
  149. after:
  150.  cmp.w #$3d,(a0)
  151.  beq openfile
  152.  cmp.w #$3c,(a0)
  153.  beq create
  154.  cmp.w #$3f,(a0)
  155.  beq loadfile
  156.  IFNE LSEEKROUTINE
  157.  cmp.w #$42,(a0)
  158.  beq lseek
  159.  ENDC
  160.  cmp.w #$3e,(a0)
  161.  beq close
  162.  IFNE SFIRSTROUTINE
  163.  cmp.w #$4e,(a0)
  164.  beq sfirst
  165.  ENDC
  166.  
  167. dotrap1:
  168.  move.l a0save(pc),a0
  169.  dc.w $4ef9
  170. oldtrap1vector:
  171.  dc.l $00
  172.  
  173.  
  174.  IFNE SFIRSTROUTINE
  175. ;************************************
  176. sfirst:
  177.  movem.l d1-d7/a1-a6,-(sp)
  178.  cmp.w #0,6(a0)
  179.  bne dorealsfirst
  180.  
  181.  MOVE.W alreadyin(pc),A1
  182.  CMP.W #1,A1
  183.  BEQ dorealsfirst
  184.  
  185.  lea alreadyin(pc),a1
  186.  move.w #1,(a1)
  187.  
  188.  move.w #0,-(sp)
  189.  move.l 2(a0),-(sp)
  190.  move.w #$4e,-(sp)
  191.  trap #1
  192.  addq.l #8,sp
  193.  tst.l d0
  194.  bmi.s errsfirst
  195.  
  196.  move.w #$2,-(sp)
  197.  move.l 2(a0),-(sp)
  198.  move.w #$3d,-(sp)
  199.  trap #1
  200.  addq.l #8,sp
  201.  lea fp(pc),a2
  202.  move.w d0,(a2)
  203.  
  204.  pea sbuf(pc)
  205.  move.l #$8,-(sp)
  206.  move.w fp(pc),-(sp)
  207.  move.w #$3f,-(sp)
  208.  trap #1
  209.  add.l #12,sp
  210.  
  211.  move.w fp(pc),-(sp)
  212.  move.w #$3e,-(sp)
  213.  trap #1
  214.  addq.l #4,sp
  215.  
  216.  move.l magic(pc),a1
  217.  lea sbuf(pc),a2
  218.  cmp.l 0(a2),a1
  219.  bne.s notcrunched
  220.  
  221.  move.w #$2F,-(sp)
  222.  trap #1
  223.  addq.l #2,sp
  224.  
  225.  move.l d0,a1
  226.  move.l 4(a2),26(a1)
  227.  
  228. notcrunched:
  229.  move.l #0,d0
  230. errsfirst:
  231.  lea alreadyin(pc),a1
  232.  move.w #0,(a1)
  233.  movem.l (sp)+,d1-d7/a1-a6
  234.  rte
  235.  ENDC
  236.  
  237.  
  238.  
  239. ;************************************
  240. create:
  241.  move.l a1,-(sp)
  242.  lea closefile(pc),a1
  243.  move.w #$01,(a1)
  244.  move.l (sp)+,a1
  245.  bra dotrap1
  246.  
  247. ;************************************
  248.  IFNE LSEEKROUTINE
  249. lseek:
  250.  movem.l d1-d7/a1-a6,-(sp)
  251.  
  252.  MOVE.W mustdorealopen(pc),A1
  253.  CMP.W #-1,A1
  254.  BEQ dorealopen
  255.  
  256.  move.w 8(a0),d1
  257.  cmp.w #0,d1
  258.  beq.s zero
  259.  cmp.w #1,d1
  260.  beq.s one
  261.  cmp.w #2,d1
  262.  beq.s two
  263.  
  264. zero:
  265.  move.l oldfp(pc),d1
  266.  add.l 2(a0),d1
  267.  lea filepointer(pc),a1
  268.  move.l d1,(a1)
  269.  move.l 2(a0),d0
  270.  bra.s leave
  271.  
  272. one:
  273.  move.l filepointer(pc),d1
  274.  add.l 2(a0),d1
  275.  lea filepointer(PC),a1
  276.  move.l d1,(a1)
  277.  sub.l oldfp(pc),d1
  278.  move.l d1,d0
  279.  bra.s leave
  280.  
  281. two:
  282.  move.l oldfp(pc),d1
  283.  add.l origlen(pc),d1
  284.  add.l 2(a0),d1
  285.  lea filepointer(PC),a1
  286.  move.l d1,(a1)
  287.  sub.l oldfp(pc),d1
  288.  move.l d1,d0
  289.  
  290. leave:
  291.  movem.l (sp)+,d1-d7/a1-a6
  292.  move.l a0save(pc),a0
  293.  rte
  294.  ENDC
  295.  
  296. ;************************************
  297. openfile:
  298.  movem.l d1-d7/a1-a6,-(sp)
  299.  MOVE.W alreadyin(pc),A1
  300.  CMP.W #1,A1
  301.  BEQ dorealopen
  302.  
  303.  IFNE FILECHECK
  304.  move.l 2(a0),a1
  305.  
  306. ; add.l #5,a1
  307.  
  308.  lea directory(PC),a2
  309.  move.l a2,a3               ;keep a copy of dir start
  310. again:
  311.  move.b (a1)+,d1
  312.  move.b (a2)+,d2
  313.  cmp.b #0,d1                ;end of filename string?
  314.  beq dorealopen
  315.  cmp.b #$ff,d2
  316.  beq done
  317.  or.b #$20,d1
  318.  or.b #$20,d2
  319.  cmp.b d1,d2
  320.  beq.s again
  321.  add.l #12,a3
  322.  move.l a3,a2
  323.  move.l 2(a0),a1            ;reset pointer to loadfname
  324.  
  325.  ;add.l #5,a1
  326.  
  327.  bra.s again
  328.  ENDC
  329.  
  330. done:
  331.  move.l decrunloc(pc),a1
  332.  add.l #$20,a1
  333.  lea filepointer(pc),a2
  334.  move.l a1,(a2)
  335.  lea oldfp(pc),a2
  336.  move.l a1,(a2)
  337.  lea eofl(pc),a2
  338.  move.l a1,(a2)
  339.  
  340.  lea alreadyin(pc),a2
  341.  move.w #1,(a2)
  342.  
  343.  move.w #$2,-(sp)
  344.  move.l 2(a0),-(sp)
  345.  move.w #$3d,-(sp)
  346.  trap #1
  347.  addq.l #8,sp
  348.  tst.l d0
  349.  bmi outerr
  350.  lea fp(pc),a2
  351.  move.w d0,(a2)
  352.  
  353.  move.l decrunloc(pc),-(sp)
  354.  move.l #$fffff,-(sp)
  355.  move.w fp(pc),-(sp)
  356.  move.w #$3f,-(sp)
  357.  trap #1
  358.  add.l #12,sp
  359.  
  360.  move.l decrunloc(pc),a2
  361.  move.l (a2),a1
  362.  cmp.l magic(pc),a1
  363.  beq.s decrunfile
  364.  
  365.  lea filepointer(pc),a2
  366.  move.l decrunloc(pc),(a2)
  367.  lea oldfp(pc),a2
  368.  move.l decrunloc(pc),(a2)
  369.  lea origlen(pc),a2
  370.  move.l d0,(a2)
  371.  lea eofl(pc),a2
  372.  move.l decrunloc(pc),(a2)
  373.  add.l d0,(a2)
  374.  bra.s next
  375.  
  376. decrunfile:
  377.  move.l 4(a2),d1
  378.  lea origlen(pc),a2
  379.  move.l d1,(a2)
  380.  lea eofl(pc),a2
  381.  add.l d1,(a2)
  382.  
  383.  move.l decrunloc(pc),a0
  384.  move.l decrunloc(pc),a1        ;UNCRUNCH TO WORK AREA
  385.  add.l #$20,a1
  386.  lea colstore(pc),a2
  387.  move.w $fff8240,(a2)
  388.  bsr decrunch
  389.  move.w colstore(pc),$fff8240
  390.  
  391. next:
  392.  move.w fp(pc),-(sp)
  393.  move.w #$3e,-(sp)
  394.  trap #1
  395.  addq.l #4,sp
  396.  
  397. theend:
  398.  move.l a0save(pc),a0
  399.  moveq.l #$00000006,d0
  400. outerr:
  401.  lea alreadyin(pc),a2
  402.  move.w #0,(a2)
  403.  movem.l (sp)+,d1-d7/a1-a6
  404.  rte
  405.  
  406. dorealopen:
  407.  move.l a0save(pc),a0
  408.  lea mustdorealopen(pc),a1
  409.  move.l #-1,(a1)
  410. dorealsfirst:
  411.  movem.l (sp)+,d1-d7/a1-a6
  412.  bra dotrap1
  413.  
  414. ;************************************
  415. loadfile:
  416.  movem.l d1-d7/a1-a6,-(sp)
  417.  move.l mustdorealopen(pc),a1
  418.  cmp.l #-1,a1
  419.  beq mustdorealload
  420.  
  421.  move.l 4(a0),d1
  422.  move.l d1,d0
  423.  move.l 8(a0),a1
  424.  move.l filepointer(pc),a2
  425. lp:
  426.  cmp.l eofl(pc),a2
  427.  beq.s tisdone
  428.  move.b (a2)+,(a1)+
  429.  subq.l #1,d1
  430.  cmp.l #0,d1
  431.  bne.s lp
  432.  
  433.  move.l 4(a0),d1
  434.  lea filepointer(PC),a1
  435.  add.l d1,(a1)
  436.  bra.s jumpover
  437.  
  438. tisdone:
  439.  move.l filepointer(pc),d1
  440.  move.l eofl(pc),d2
  441.  sub.l d1,d2
  442.  move.l d2,d0
  443.  lea filepointer(PC),a1
  444.  move.l eofl(pc),(a1)
  445.  
  446. jumpover:
  447.  movem.l (sp)+,d1-d7/a1-a6
  448.  move.l a0save(pc),a0
  449.  rte
  450.  
  451. mustdorealload:
  452.  movem.l (sp)+,d1-d7/a1-a6
  453.  move.l a0save(pc),a0
  454.  bra dotrap1
  455.  
  456. ;************************************
  457. close:
  458.  move.l a1,-(sp)
  459.  move.l mustdorealopen(pc),a1
  460.  cmp.l #-1,a1
  461.  beq.s mustdorealclose
  462.  move.w closefile(pc),a1
  463.  cmp.w #1,a1
  464.  beq.s mustdorealclose
  465.  moveq.l #00,d0
  466.  move.l a0save(pc),a0
  467.  move.l (sp)+,a1
  468.  rte
  469.  
  470. mustdorealclose:
  471.  lea mustdorealopen(PC),a0
  472.  move.l #0,(a0)
  473.  lea closefile(PC),a0
  474.  move.w #0,(a0)
  475.  move.l a0save(pc),a0
  476.  move.l (sp)+,a1
  477.  bra dotrap1
  478.  
  479.  
  480. ;************************************
  481. decrunch:
  482.         ADDA.L    #$4,A0    ;ALLOW FOR HEADER
  483.         MOVE.L    A0,A6
  484.         MOVE.L    (A0)+,D5
  485.         ADDA.L    D5,A1
  486.         ADDA.L    (A0),A0
  487.         SUBA.L    #4,A0
  488.         TST.W    -(A0)
  489.         BPL.S    L_1
  490.         SUBQ.L    #1,A0
  491. L_1        MOVE.B    -(A0),D0
  492. L_2        LSL.B    #1,D0
  493.         BNE.S    L_3
  494.         MOVE.B    -(A0),D0
  495.         ROXL.B    #1,D0
  496. L_3        BCC.S    L_10
  497.         CLR.W    D1
  498.         LSL.B    #1,D0
  499.         BNE.S    L_4
  500.         MOVE.B    -(A0),D0
  501.         ROXL.B    #1,D0
  502. L_4        BCC.S    L_9
  503.         LEA    NUMS(PC),A3
  504.         MOVEQ    #3,D3
  505. L_5        CLR.W    D1
  506.         MOVE.B    0(A3,D3.W),D2
  507.         EXT.W    D2
  508.         MOVEQ    #-1,D4
  509.         LSL.W    D2,D4
  510.         NOT.W    D4
  511.         SUBQ.W    #1,D2
  512. L_6        LSL.B    #1,D0
  513.         BNE.S    L_7
  514.         MOVE.B    -(A0),D0
  515.         ROXL.B    #1,D0
  516. L_7        ROXL.W    #1,D1
  517.         DBF    D2,L_6
  518.         TST.W    D3
  519.         BEQ.S    L_8
  520.         CMP.W    D1,D4
  521.         DBNE    D3,L_5
  522. L_8        MOVE.B    4(A3,D3.W),D2
  523.         EXT.W    D2
  524.         ADD.W    D2,D1
  525. L_9
  526.         MOVE.B    -(A0),-(A1)
  527.         IFNE COLFLASH
  528. ;        ADDQ.W    #1,$FFFF8240
  529.         MOVE.W    D0,$FFFF8240
  530.         ENDC
  531.         DBF    D1,L_9
  532. L_10        MOVE.L    A6,A3
  533.         ADDQ.L    #$8,A3
  534.         CMPA.L    A3,A0
  535.         BLE    BYENOW
  536.         LEA    NUMS2(PC),A3
  537.         MOVEQ    #3,D2
  538. L_11        LSL.B    #1,D0
  539.         BNE.S    L_12
  540.         MOVE.B    -(A0),D0
  541.         ROXL.B    #1,D0
  542. L_12        BCC.S    L_13
  543.         DBF    D2,L_11
  544. L_13        CLR.W    D1
  545.         ADDQ.W    #1,D2
  546.         MOVE.B    0(A3,D2.W),D3
  547.         BEQ.S    L_16
  548.         EXT.W    D3
  549.         SUBQ.W    #1,D3
  550. L_14        LSL.B    #1,D0
  551.         BNE.S    L_15
  552.         MOVE.B    -(A0),D0
  553.         ROXL.B    #1,D0
  554. L_15        ROXL.W    #1,D1
  555.         DBF    D3,L_14
  556. L_16        MOVE.B    5(A3,D2.W),D3
  557.         EXT.W    D3
  558.         ADD.W    D3,D1
  559.         CMPI.W    #2,D1
  560.         BEQ.S    L_22
  561.         LEA    NUMS3(PC),A3
  562.         MOVEQ    #1,D3
  563. L_17        LSL.B    #1,D0
  564.         BNE.S    L_18
  565.         MOVE.B    -(A0),D0
  566.         ROXL.B    #1,D0
  567. L_18        BCC.S    L_19
  568.         DBF    D3,L_17
  569. L_19        ADDQ.W    #1,D3
  570.         CLR.W    D2
  571.         MOVE.B    0(A3,D3.W),D4
  572.         EXT.W    D4
  573. L_20        LSL.B    #1,D0
  574.         BNE.S    L_21
  575.         MOVE.B    -(A0),D0
  576.         ROXL.B    #1,D0
  577. L_21        ROXL.W    #1,D2
  578.         DBF    D4,L_20
  579.         LSL.W    #1,D3
  580.         ADD.W    4(A3,D3.W),D2
  581.         BRA.S    L_26
  582. L_22        CLR.W    D2
  583.         MOVEQ    #5,D3
  584.         CLR.W    D4
  585.         LSL.b    #1,D0
  586.         BNE.S    L_23
  587.         MOVE.B    -(A0),D0
  588.         ROXL.B    #1,D0
  589. L_23        BCC.S    L_24
  590.         MOVEQ    #8,D3
  591.         MOVEQ    #$40,D4
  592. L_24        LSL.B    #1,D0
  593.         BNE.S    L_25
  594.         MOVE.B    -(A0),D0
  595.         ROXL.B    #1,D0
  596. L_25        ROXL.W    #1,D2
  597.         DBF    D3,L_24
  598.         ADD.W    D4,D2
  599. L_26        LEA    0(A1,D2.W),A2
  600.         EXT.L    D1
  601.         ADDA.L    D1,A2
  602.         SUBQ.W    #1,D1
  603. L_27        MOVE.B    -(A2),-(A1)
  604.         DBF    D1,L_27
  605.         BRA    L_2
  606. BYENOW        RTS
  607. NUMS        DC.B    $0A,$03,$02,$02,$0E,$07,$04,$01
  608. NUMS2        DC.B    $0A,$02,$01,$00,$00,$0A,$06,$04,$03,$02
  609. NUMS3        DC.B    $0B,$04,$07,$00,$01,$20,$00,$00
  610.         DC.B    $00,$20,$00,$00
  611.  
  612. ;magic: dc.b 'AUTM'
  613.  magic: dc.b 'LSD!'
  614.  
  615.  IFNE FILECHECK
  616. directory:
  617.  DC.B 'NAMES       '
  618.  DC.B 'NAMES.NEW   '
  619.  DC.B 'HIGH        '
  620.  DC.B 'HIGH.NEW    '
  621. ;dc.b 'xxxxxxxx.xxx'
  622.  DC.L $FFFFFFFF
  623.  ENDC
  624.  
  625. a0save: dc.l $00
  626. colstore: dc.l $00
  627. filepointer: dc.l $00
  628. origlen: dc.l $00
  629. mustdorealopen: dc.l $00
  630. closefile: dc.w $00
  631. alreadyin: dc.l $00
  632. oldfp: dc.l $00
  633. eofl: dc.l $00
  634. decrunloc: dc.l $00
  635. fp: dc.w $00
  636. sbuf: dc.l $00,$00
  637.  
  638. endofroutine: