home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_27_1988_Transactor_Publishing.d64 / shellram.sda / NEWCC.A < prev    next >
Text File  |  2023-02-26  |  7KB  |  537 lines

  1. ;
  2. ; newcc.a
  3. ;  - source for Power C Compiler driver
  4. ;
  5. ; Adrian Pepper, March 8, 1988
  6. ;
  7.  .ref argstk
  8.  .ref sysdev
  9.  .ref sysdrv
  10.  .ref wrkdev
  11.  .ref wrkdrv
  12. ;
  13.  .ref setlfs
  14.  .ref setnam
  15.  .ref open
  16.  .ref close
  17.  .ref chkin
  18.  .ref chkout
  19.  .ref clrchn
  20.  .ref chrin
  21.  .ref chrout
  22.  .ref readst
  23.  .ref load
  24.  .ref getin
  25. ;
  26. ;
  27. ramdisk = 1  ;; non-zero assembles ramdisk version
  28. ;
  29. ; * = $1800  ;; use link -s $1800
  30. ;
  31. ;  link -s $1800
  32. ;> newcc.o
  33. ;> usrprog.o
  34. ;> c64kernal.o
  35. ;>
  36. ;
  37. usrprog jmp start
  38.  jmp opnsrc
  39. start lda #1
  40.  sta pflag   ; default prompt for disks
  41.  lda #'r     ; default "register" vars
  42.  sta $03ff
  43. arglp dec argstk
  44.  beq usage  ; shouldn't end with an option
  45.  clc
  46.  lda argstk+2
  47.  adc #2
  48.  sta argstk+2
  49.  sta $4b
  50.  lda argstk+3
  51.  adc #0
  52.  sta argstk+3
  53.  sta $4c
  54. t0100f ldy #1
  55.  lda ($4b),y
  56.  sta $4e
  57.  dey
  58.  lda ($4b),y
  59.  sta $4d
  60.  lda ($4d),y
  61.  cmp #'-
  62.  bne nodash
  63. dashlp iny
  64.  lda ($4d),y
  65.  beq arglp
  66.  cmp #'p
  67.  bne t0200f
  68.  lda #0    ; don't prompt disk changes
  69.  sta pflag
  70.  jmp dashlp
  71. t0200f cmp #'a
  72.  bne t0210f
  73.  sta $03ff
  74.  jmp dashlp
  75. t0210f cmp #'s
  76.  bne usage
  77.  sta $03ff
  78.  jmp dashlp
  79. ;
  80. usage ldx #<susage
  81.  ldy #>susage
  82. outstr stx $4b
  83.  sty $4c
  84.  ldy #0
  85. t0240b lda ($4b),y
  86.  beq t0250f
  87.  jsr chrout
  88.  iny
  89.  bne t0240b
  90. t0250f rts
  91. ;
  92. nodash = * ; assert argstk (count) != 0
  93. t0300f ldy #0
  94.  ldx #2
  95. t0310b lda ($4d),y
  96.  sta srcnam,x  ;; file name including '\0' is stored
  97.  beq t0320f
  98.  iny
  99.  inx
  100.  bne t0310b
  101. t0320f stx srclen
  102.  dey
  103.  lda ($4d),y
  104.  cmp #'c
  105.  bne t0330f
  106.  dey
  107.  lda ($4d),y
  108.  cmp #'.
  109.  beq t0340f
  110. t0330f ldx #<sncsf
  111.  ldy #>sncsf
  112.  jmp outstr
  113. t0340f lda wrkdrv
  114.  clc
  115.  adc #'0
  116.  sta srcnam
  117.  sta sstemp+1
  118.  sta stemp1
  119.  sta stemp2
  120.  lda sysdrv
  121.  adc #'0
  122.  sta sizero+1
  123.  sta bcmpnam
  124.  sta btrnnam
  125.  lda #2
  126.  ldx sysdev
  127.  tay
  128.  jsr setlfs
  129.  lda #cmplen
  130.  ldx #<bcmpnam
  131.  ldy #>bcmpnam
  132.  jsr setnam
  133.  lda #0
  134.  jsr load
  135.  bcc docomp
  136.  ldx #<scdnp
  137.  ldy #>scdnp
  138.  jmp outstr
  139. docomp lda wrkdev
  140.  sta $fe
  141.  jsr $2000
  142.  lda #2
  143.  jsr close
  144.  jsr clscmd
  145.  lda $fe
  146.  beq t0400f
  147.  jsr idisks
  148.  jmp clscmd ; and return to shell
  149. ;
  150. t0400f ldx #<sinscmp
  151.  ldy #>sinscmp
  152.  jsr prompt
  153.  jsr idisks
  154.  lda #2
  155.  ldx sysdev
  156.  tay
  157.  jsr setlfs
  158.  lda #trnlen
  159.  ldx #<btrnnam
  160.  ldy #>btrnnam
  161.  jsr setnam
  162.  lda #0
  163.  jsr load
  164.  bcc dotrans
  165.  ldx #15
  166.  jsr chkin
  167. t0410b jsr chrin
  168.  pha
  169.  jsr chrout
  170.  pla
  171.  cmp #$0d
  172.  bne t0410b
  173.  jsr clrchn
  174.  ldx #<scdnp
  175.  ldy #>scdnp
  176.  jmp outstr
  177. dotrans ldx #<sinsobj
  178.  ldy #>sinsobj
  179.  jsr prompt
  180.  jsr cmdout
  181.  ldx #<sstemp
  182.  ldy #>sstemp
  183.  jsr outstr
  184.  jsr rcmdchn
  185.  ldx #15
  186.  jsr chkout
  187.  ldx srclen
  188.  dex
  189. ;
  190. ; scratch old object file, if any
  191. ;
  192.  lda #'o
  193.  sta srcnam,x
  194.  lda #'s
  195.  jsr chrout
  196.  ldx #<srcnam
  197.  ldy #>srcnam
  198.  jsr outstr
  199.  lda #$0d
  200.  jsr chrout
  201.  jsr rcmdchn
  202.  lda #2
  203.  ldx wrkdev
  204.  tay
  205.  jsr setlfs
  206.  lda #t1len
  207.  ldx #<stemp1
  208.  ldy #>stemp1
  209.  jsr setnam
  210.  jsr open    ; 2,work,2,stemp1
  211.  jsr rcmdchn
  212.  beq t0520f
  213.  ldx #<scnoof
  214.  ldy #>scnoof
  215.  jsr outstr
  216.  lda #2
  217.  jsr close
  218.  jmp clscmd
  219. ;
  220. t0520f lda #3
  221.  ldx wrkdev
  222.  tay
  223.  jsr setlfs
  224.  lda #t2len
  225.  ldx #<stemp2
  226.  ldy #>stemp2
  227.  jsr setnam
  228.  jsr open   ; 3,work,3,stemp2
  229.  jsr $2000
  230.  lda #3
  231.  jsr close
  232.  lda #2
  233.  jsr close
  234. ;
  235.  lda $fe    ; 0 indicates okay return
  236.  beq concat
  237.  jmp scrtemp  ; and return to shell
  238. ;
  239. ;
  240. ;
  241. concat = *
  242.  .ifeq ramdisk,0
  243.  jsr cmdout
  244.  lda #'c  ; concatenate temp files into new object
  245.  jsr chrout
  246.  ldx #<srcnam
  247.  ldy #>srcnam   ; now source.o
  248.  jsr outstr
  249.  lda #'=
  250.  jsr chrout
  251.  ldx #0
  252. t0610b lda stemp2,x
  253.  jsr chrout
  254.  inx
  255.  cpx #t2len-4
  256.  bne t0610b
  257.  lda #',
  258.  jsr chrout
  259.  ldx #0
  260. t0620b lda stemp1,x
  261.  jsr chrout
  262.  inx
  263.  cpx #t1len-4
  264.  bne t0620b
  265.  lda #$0d
  266.  jsr chrout
  267.  jsr rcmdchn
  268.  ldx #15
  269.  jsr chkout
  270. ;
  271.  .else
  272. ;
  273.  ldx #<scatfil
  274.  ldy #>scatfil
  275.  jsr outstr
  276.  lda #2
  277.  ldx wrkdev
  278.  tay
  279.  jsr setlfs
  280.  ldx srclen
  281.  lda #',
  282.  sta srcnam,x
  283.  inx
  284.  lda #'w
  285.  sta srcnam,x
  286.  inx
  287.  lda #0
  288.  sta srcnam,x
  289.  txa
  290.  ldx #<srcnam
  291.  ldy #>srcnam
  292.  jsr setnam
  293.  jsr open    ; 2,work,2,srcnam.o,w
  294.  jsr rcmdchn
  295.  beq t0620f
  296.  ldx #<scnoof
  297.  ldy #>scnoof
  298.  jsr outstr
  299.  jmp badcat
  300. ;
  301. t0620f lda #t2len-4
  302.  ldx #<stemp2
  303.  ldy #>stemp2
  304.  jsr tcopy   ; copies to 2, using 3
  305. ;
  306.  lda #t1len-4
  307.  ldx #<stemp1
  308.  ldy #>stemp1
  309.  jsr tcopy   ; copies to 2, using 3
  310.  jmp badcat
  311. ;
  312. tcopy = *
  313.  jsr setnam
  314.  lda #3
  315.  ldx wrkdev
  316.  tay
  317.  jsr setlfs
  318.  jsr open    ; 3,work,3,xxxtempn
  319. ;
  320. tcopylp ldx #3
  321.  jsr chkin
  322.  ldx #<buff
  323.  ldy #>buff
  324.  lda #254
  325.  jsr getblk
  326.  pha  ; save readst
  327.  ldx #2
  328.  jsr chkout
  329.  tya ; transfer count
  330.  ldx #<buff
  331.  ldy #>buff
  332.  jsr putblk
  333.  pla  ; get back readst
  334.  beq tcopylp
  335. ;
  336.  jsr clrchn
  337.  lda #3
  338.  jmp close   ; and return
  339. ;
  340. ; getblk max (x,y)
  341. ;
  342. ;  returns readst
  343. ;    y is count
  344. ;
  345. ; c64 kernal is such block must be
  346. ;  at least 1 char
  347. ;
  348. getblk = *
  349.  stx $22
  350.  sty $23
  351.  sta $24
  352.  ldy #0
  353. t0510 jsr chrin
  354.  sta ($22),y
  355.  iny
  356.  jsr readst
  357.  bne t0520
  358.  cpy $24
  359.  bne t0510
  360. t0520 rts
  361. ;
  362. ;
  363. putblk = *
  364.  stx $22
  365.  sty $23
  366.  sta $24
  367.  ldy #0
  368.  beq t0540
  369. t0530 lda ($22),y
  370.  jsr chrout
  371.  iny
  372. t0540 cpy $24
  373.  bne t0530
  374.  rts
  375. ;
  376. badcat = *
  377.  lda #2
  378.  jsr close
  379.  .fi
  380. ;
  381. ;
  382.  jsr scrtemp
  383.  ldx argstk
  384.  dex
  385.  beq t0600f
  386.  jmp arglp
  387. ;
  388. t0600f rts ; return to shell
  389. ;
  390. scrtemp ldx #15
  391.  jsr chkout
  392.  ldx #<sstemp
  393.  ldy #>sstemp
  394.  jsr outstr
  395.  jsr rcmdchn
  396.  lda #15
  397.  jmp close  ; and return
  398. ;
  399. idisks jsr clscmd
  400.  ldx sysdev
  401.  cpx wrkdev
  402.  beq samedev
  403.  lda #15
  404.  tay
  405.  jsr setlfs
  406.  lda #1
  407.  ldx #<sizero
  408.  ldy #>sizero
  409.  jsr setnam
  410.  jsr open
  411.  jsr clscmd
  412.  ldx wrkdev
  413. samedev lda #15
  414.  tay
  415.  jsr setlfs
  416.  lda #1
  417.  ldx #<sizero
  418.  ldy #>sizero
  419.  jsr setnam
  420.  jmp open  ; and return
  421. ;
  422. ; open source from inside compiler
  423. ;
  424. opnsrc lda 1
  425.  pha
  426.  ora #$07
  427.  sta 1
  428.  cli
  429.  ldx #<sinssrc
  430.  ldy #>sinssrc
  431.  jsr prompt
  432.  lda sstemp+1
  433.  sta sizero+1
  434.  lda #15
  435.  ldx wrkdev
  436.  tay
  437.  jsr setlfs
  438.  lda #3
  439.  ldx #<sizero
  440.  ldy #>sizero
  441.  jsr setnam
  442.  jsr open
  443.  lda #2
  444.  ldx wrkdev
  445.  tay
  446.  jsr setlfs
  447.  ldx #<srcnam
  448.  ldy #>srcnam
  449.  lda srclen
  450.  jsr setnam
  451.  jsr open    ;; 2,work,2,srcnam
  452.  bcs t0720f
  453.  jsr rcmdchn
  454.  bne t0720f
  455.  clc
  456.  bcc t0730f
  457. t0720f lda #2
  458.  jsr close
  459.  ldx #<ssfnf
  460.  ldy #>ssfnf
  461.  sec
  462. t0730f sei
  463.  pla
  464.  sta 1
  465.  rts
  466. rcmdchn ldx #15
  467.  jsr chkin
  468.  jsr chrin
  469.  cmp #'0
  470.  bne t0800f
  471.  jsr chrin
  472.  cmp #'0
  473. t0800f php
  474. t0810b jsr chrin
  475.  cmp #$0d
  476.  bne t0810b
  477.  jsr clrchn
  478.  plp  ; follow with beq for okay
  479.  rts
  480. ;
  481. cmdout ldx #15
  482.  jmp chkout ; and return
  483. ;
  484. clscmd jsr clrchn
  485.  lda #15
  486.  jmp close
  487. ;
  488. prompt lda pflag
  489.  bne t0900f
  490.  rts
  491. t0900f jsr outstr
  492. t0910b jsr  getin
  493.  cmp #$0d
  494.  bne t0910b
  495.  rts
  496. susage .byte "usage:  cc [-pas]" 
  497.  .byte " filename"
  498.  .byte $0d, $0d, $00
  499. scdnp .byte "compiler disk not present"
  500.  .byte $0d, $0d, $00
  501. ssfnf .byte "source file not found"
  502.  .byte $0d, $0d, $00
  503. sinssrc .byte $0d
  504.  .byte "insert source disk"
  505.  .byte $0d, $0d, $00
  506. sinscmp .byte $0d
  507.  .byte "insert compiler disk"
  508.  .byte $0d, $00
  509. sinsobj .byte "insert object disk"
  510.  .byte $0d, $0d, $00
  511. sncsf .byte "not a C source file"
  512.  .byte $0d, $0d, $00
  513. scnoof .byte "can't open object file"
  514.  .byte $0d, $0d, $00
  515. scatfil .byte $0d
  516.  .byte "...concatenating object file..."
  517.  .byte $0d, $00
  518. sizero .byte "i0:"
  519.  .byte $0d, $00
  520. sstemp .byte "s0:xxxtemp*"
  521.  .byte $0d, $00
  522. stemp1 .byte "0:xxxtemp1,s,w"
  523. t1len = *-stemp1 
  524.  .byte $00
  525. stemp2 .byte "0:xxxtemp2,s,w"
  526. t2len = *-stemp2
  527.  .byte $00
  528. bcmpnam .byte "0:compiler"
  529. cmplen = *-bcmpnam
  530. btrnnam .byte "0:translator"
  531. trnlen = *-btrnnam
  532. srclen .byte $00
  533. srcnam .byte "0:"
  534.  .bss 22
  535. pflag .bss 1
  536. buff = *
  537.