home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / ACE-R11-SCR3.ARC / AS.S next >
Encoding:
Text File  |  2019-04-13  |  8.2 KB  |  632 lines

  1. ;*** AS PROGRAM
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@0:AS"
  6.  
  7. JMP ASMAIN
  8. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  9. .BYTE 64,0  ;** STACK,RESERVED
  10.  
  11. ;*** GLOBAL DECLARATIONS
  12.  
  13. LIBWORK = $60
  14. CHR├╥ = $0D
  15. CHR╤UOTE = $22
  16. CHR╘AB = $09
  17. CHR┼╧╞ = $00
  18.  
  19. ;******** STANDARD LIBRARY ********
  20. PUTS = *
  21.    LDX #STDOUT
  22. FPUTS = *
  23.    STA ZP
  24.    STY ZP+1
  25.    LDY #$FF
  26. -  INY
  27.    LDA (ZP),Y
  28.    BNE -
  29.    TYA
  30.    LDY #0
  31.    JMP WRITE
  32.  
  33. PUTCHAR = *
  34.    LDX #STDOUT
  35. PUTC = *
  36.    STA PUTC┬UFFER
  37.    LDA #<PUTC┬UFFER
  38.    LDY #>PUTC┬UFFER
  39.    STA ZP
  40.    STY ZP+1
  41.    LDA #1
  42.    LDY #0
  43.    JMP WRITE
  44.    PUTC┬UFFER .BUF 1
  45.  
  46. GETCHAR = *
  47.    LDX #STDIN
  48. GETC = *
  49.    LDA #<GETC┬UFFER
  50.    LDY #>GETC┬UFFER
  51.    STA ZP
  52.    STY ZP+1
  53.    LDA #1
  54.    LDY #0
  55.    JSR READ
  56.    BEQ +
  57.    LDA GETC┬UFFER
  58.    RTS
  59. +  SEC
  60.    RTS
  61.    GETC┬UFFER .BUF 1
  62.  
  63. GETARG = *
  64.    STY ZP+1
  65.    ASL
  66.    STA ZP
  67.    ROL ZP+1
  68.    CLC
  69.    LDA ACE┴RGV
  70.    ADC ZP
  71.    STA ZP
  72.    LDA ACE┴RGV+1
  73.    ADC ZP+1
  74.    STA ZP+1
  75.    LDY #0
  76.    LDA (ZP),Y
  77.    TAX
  78.    INY
  79.    LDA (ZP),Y
  80.    STX ZP
  81.    STA ZP+1
  82.    RTS
  83.  
  84. SOURCE╞CB  =  2 ;(1)
  85. BUFPTR     =  3 ;(1)
  86. SOURCE╠INE =  4 ;(4)
  87. NUMBER     =  8 ;(4)
  88. STRING╠EN  = 12 ;(1)
  89. PREV├HAR   = 13 ;(1)
  90.  
  91. TOKEN╔DENTIFIER = 0
  92. TOKEN╬UMBER = 1
  93. TOKEN╙TRING = 2
  94. TOKEN╙PECIAL = 3
  95.  
  96. CHR┼RR╔DENT╘OO╠ONG = $F0
  97. CHR┼RR╙TRING╘OO╠ONG = $F1
  98. CHR┼RR╬O├LOSE╤UOTE = $F2
  99. CHR┼RR┬AD╬UMBER = $F3
  100. CHR┼RR╬UM╧VERFLOW = $F4
  101.  
  102. ASMAIN = *
  103.    LDA ACE┴RGC+1
  104.    BEQ +
  105.    ;** USAGE ERROR!
  106. -  RTS
  107. +  LDA ACE┴RGC
  108.    CMP #2
  109.    BNE -
  110.    LDA #1
  111.    LDY #0
  112.    JSR GETARG
  113.    LDA #"R"
  114.    JSR OPEN
  115.    BCC +
  116.    ;** SOURCE OPEN ERROR!
  117.    RTS
  118. +  STA SOURCE╞CB
  119.    LDA #1
  120.    STA SOURCE╠INE
  121.    LDA #0
  122.    STA SOURCE╠INE+1
  123.    STA SOURCE╠INE+2
  124.    STA SOURCE╠INE+3
  125.    LDA #255
  126.    STA BUFPTR
  127.    JSR AS─RIVER
  128.    LDA SOURCE╞CB
  129.    JSR CLOSE
  130.    RTS
  131.  
  132. ;=FILL ENTIRE BUFFER, PAD WITH SPACES; .├╙=EOF
  133. FILLBUF = *
  134.    LDA #<SOURCE┬UF
  135.    LDY #>SOURCE┬UF
  136.    STA ZP
  137.    STY ZP+1
  138.    LDA #0
  139.    LDY #1
  140.    STA BUFPTR
  141.    LDX SOURCE╞CB
  142.    JSR READ
  143.    BNE +
  144.    SEC
  145.    RTS
  146. +  CPY #1
  147.    BCC +
  148.    CLC
  149.    RTS
  150. +  TAY
  151.    LDA #" "
  152. -  STA SOURCE┬UF,Y
  153.    INY
  154.    BNE -
  155.    CLC
  156.    RTS
  157.  
  158. GET╬EXT├HAR = *
  159.    INC BUFPTR
  160.    BEQ +
  161. -  LDY BUFPTR
  162.    LDA SOURCE┬UF,Y
  163.    RTS
  164. +  JSR FILLBUF
  165.    BCC -
  166.    LDA #CHR┼╧╞
  167.    RTS
  168.  
  169. EAT╫HITESPACE = *  ;() : .┴=╬EXT├HAR
  170.    LDA PREV├HAR
  171.    CMP #" "
  172.    BEQ +
  173.    CMP #CHR╘AB
  174.    BEQ +
  175.    RTS
  176. +  LDY BUFPTR
  177. -  INY
  178.    BEQ +
  179.    EAT╫H├ONT = *
  180.    LDA SOURCE┬UF,Y
  181.    CMP #" "
  182.    BEQ -
  183.    CMP #CHR╘AB
  184.    BEQ -
  185.    STY BUFPTR
  186.    RTS
  187. +  JSR FILLBUF
  188.    BCS +
  189.    LDY #0
  190.    JMP EAT╫H├ONT
  191. +  LDA #CHR┼╧╞
  192.    RTS
  193.  
  194. ;===TOKEN DISPATCH===
  195. ;RET: .╪=TOKEN╔DENTIFIER, .┴=NEXT├HAR, .┘=STRLEN, STRING╠EN, STRING┬UF
  196. ;     .╪=TOKEN╬UMBER,     .┘=NUMLEN, NUMBER
  197. ;     .╪=TOKEN╙TRING,     .┴=FIRST├HAR,.┘=STRLEN, STRING╠EN, STRING┬UF
  198. ;     .╪=TOKEN╙PECIAL,    .┴=CHAR
  199.  
  200. GET╘OKEN = *
  201.    LDA PREV├HAR
  202.    CMP #" "
  203.    BNE +
  204. -  JSR EAT╫HITESPACE
  205. +  CMP #CHR╘AB
  206.    BEQ -
  207.    CMP #"@"
  208.    BCC +
  209.    JMP GET╔DENTIFIER
  210. +  CMP #"'"
  211.    BCC CMP═ORE1
  212.    BNE +
  213.    JMP GET╙TRING
  214. +  CMP #"0"
  215.    BCC TOK╙PECIAL
  216.    CMP #":"
  217.    BCS +
  218.  
  219.    TOK╬UM = *
  220.    JMP GET╬UMBER
  221.  
  222. +  CMP #";"
  223.    BNE +
  224.    JMP EAT├OMMENT
  225.  
  226.    TOK╙PECIAL = *
  227.    JMP GET╙PECIAL╘OKEN
  228.  
  229.    CMP═ORE1 = *
  230.    CMP #"$"
  231.    BCC +
  232.    BEQ TOK╬UM
  233.    CMP #"%"
  234.    BEQ TOK╬UM
  235.    JMP GET╙PECIAL╘OKEN
  236.  
  237. +  CMP #CHR╤UOTE
  238.    BNE TOK╙PECIAL
  239.    JMP GET╙TRING
  240.  
  241. ;===COMMENT===
  242.  
  243. EAT├OMMENT = *
  244.    LDY BUFPTR
  245. -  INY
  246.    BEQ +
  247.  
  248.    COMMENT├HAR = *
  249.    LDA SOURCE┬UF,Y
  250.    CMP #CHR├╥
  251.    BNE -
  252.    STY BUFPTR
  253.    JMP GET╙PECIAL╘OKEN
  254. +  JSR FILLBUF
  255.    BCS +
  256.    LDY #0
  257.    BEQ COMMENT├HAR
  258. +  LDA #CHR┼╧╞
  259.    JMP GET╙PECIAL╘OKEN
  260.  
  261. ;===SPECIAL===
  262.  
  263. GET╙PECIAL╘OKEN = *
  264.    PHA
  265.    CMP #CHR├╥
  266.    BNE +
  267.    INC SOURCE╠INE
  268.    BNE +
  269.    INC SOURCE╠INE+1
  270.    BNE +
  271.    INC SOURCE╠INE+2
  272.    BNE +
  273.    INC SOURCE╠INE+3
  274. +  CMP #CHR┼╧╞
  275.    BEQ +
  276.    JSR GET╬EXT├HAR
  277. +  STA PREV├HAR
  278.    PLA
  279.    LDX #TOKEN╙PECIAL
  280.    RTS
  281.  
  282. ;===IDENTIFIER===
  283.  
  284. GET╔DENTIFIER = *
  285.    STA STRING┬UF
  286.    LDY #1
  287.    STY STRING╠EN
  288. -  JSR GET╬EXT├HAR
  289.    CMP #"@"
  290.    BCC IDENT┼XIT
  291.  
  292.    IDENT╟OOD├HAR = *
  293.    LDY STRING╠EN
  294.    STA STRING┬UF,Y
  295.    INC STRING╠EN
  296.    BNE -
  297.    STA PREV├HAR
  298.    LDX #TOKEN╙PECIAL
  299.    LDA #CHR┼RR╔DENT╘OO╠ONG
  300.    RTS
  301.  
  302.    IDENT┼XIT = *
  303.    CMP #"."
  304.    BEQ IDENT╟OOD├HAR
  305.    CMP #"_"
  306.    BEQ IDENT╟OOD├HAR
  307.    CMP #"0"
  308.    BCC +
  309.    CMP #":"
  310.    BCC IDENT╟OOD├HAR
  311. +  CMP #" "
  312.    BNE +
  313. -  STA PREV├HAR
  314.    JSR EAT╫HITESPACE
  315. +  CMP #CHR╘AB
  316.    BEQ -
  317.    STA PREV├HAR
  318.    LDA #0
  319.    LDY STRING╠EN
  320.    STA STRING┬UF,Y
  321.    LDA PREV├HAR
  322.    LDY STRING╠EN
  323.    LDX #TOKEN╔DENTIFIER
  324.    RTS
  325.  
  326. ;===STRING===
  327.  
  328. STR─ELIMIT = 20
  329.  
  330. GET╙TRING = *
  331.    STA STR─ELIMIT
  332.    LDA #0
  333.    STA STRING╠EN
  334. -  JSR GET╬EXT├HAR
  335.    STA PREV├HAR
  336.    CMP #CHR┼╧╞
  337.    BEQ STR┼OF
  338.    CMP STR─ELIMIT
  339.    BEQ STR┼XIT
  340.    CMP #CHR├╥
  341.    BEQ STR┼OF
  342.    CMP #"\"
  343.    BEQ STR┼SC
  344.    GET╙TR╨UT = *
  345.    LDY STRING╠EN
  346.    STA STRING┬UF,Y
  347.    INC STRING╠EN
  348.    BNE -
  349.    STA PREV├HAR
  350.    LDA #CHR┼RR╙TRING╘OO╠ONG
  351.    LDX #TOKEN╙PECIAL
  352.    RTS
  353.  
  354. STR┼SC = *
  355.    JSR GET╬EXT├HAR
  356.    CMP #CHR├╥
  357.    BEQ STR┼OF
  358.    CMP #CHR┼╧╞
  359.    BEQ STR┼OF
  360.    LDX #STR┼SC├HAR┼ND-STR┼SC├HAR-1
  361. -  CMP STR┼SC├HAR,X
  362.    BEQ +
  363.    DEX
  364.    BPL -
  365.    JMP GET╙TR╨UT
  366. +  LDA STR┼SC╘RANS,X
  367.    JMP GET╙TR╨UT
  368.  
  369. STR┼SC├HAR = *
  370.    .ASC "\NBTRAZ'E0"
  371.    .BYTE CHR╤UOTE
  372.    STR┼SC├HAR┼ND = *
  373. STR┼SC╘RANS = *
  374.    .BYTE 92,13,157,9,13,7,0,39,27,0,34
  375.  
  376. STR┼OF = *
  377.    LDA #CHR┼RR╬O├LOSE╤UOTE
  378.    LDX #TOKEN╙PECIAL
  379.    RTS
  380.  
  381. STR┼XIT = *
  382.    JSR GET╬EXT├HAR
  383.    STA PREV├HAR
  384.    LDA #0  ;BUT MAY CONTAIN \0
  385.    LDY STRING╠EN
  386.    STA STRING┬UF,Y
  387.    LDA STRING┬UF
  388.    LDX #TOKEN╙TRING
  389.    RTS
  390.  
  391. NUM┬ASE = 20  ;(1)
  392. NUM╙AVE = 21  ;(4)
  393.  
  394. GET╬UMBER = *
  395.    PHA
  396.    LDX #3
  397.    LDA #0
  398. -  STA NUMBER,X
  399.    DEX
  400.    BPL -
  401.    PLA
  402.    LDX #16
  403.    CMP #"$"
  404.    BEQ +
  405.    LDX #2
  406.    CMP #"%"
  407.    BEQ +
  408.    LDX #10
  409.    STX NUM┬ASE
  410.    BNE GOT╬EXT─IGIT
  411. +  STX NUM┬ASE
  412.    JSR GET╬EXT├HAR
  413.    STA PREV├HAR
  414.    JSR CHECK─IGIT
  415.    BCC +
  416.    LDA #CHR┼RR┬AD╬UMBER
  417.    LDX #TOKEN╙PECIAL
  418.    RTS
  419. +  TXA
  420.    JMP GOT╬EXT─IGIT
  421.  
  422. NEXT─IGIT = *
  423.    JSR GET╬EXT├HAR
  424.    STA PREV├HAR
  425.    CMP #"_"
  426.    BEQ NEXT─IGIT
  427. GOT╬EXT─IGIT = *
  428.    JSR CHECK─IGIT
  429.    BCS GET╬UM┼XIT
  430.    PHA
  431.    JSR SHIFT╬UMBER
  432.    BCS OVERFLOW┼XIT╨LA
  433.    PLA
  434.    CLC
  435.    ADC NUMBER
  436.    STA NUMBER
  437.    BCC +
  438.    INC NUMBER+1
  439.    BNE +
  440.    INC NUMBER+2
  441.    BNE +
  442.    INC NUMBER+3
  443.    BEQ OVERFLOW┼XIT
  444. +  JMP NEXT─IGIT
  445.  
  446. OVERFLOW┼XIT╨LA = *
  447.    PLA
  448. OVERFLOW┼XIT = *
  449.    LDX #TOKEN╙PECIAL
  450.    LDA #CHR┼RR╬UM╧VERFLOW
  451.    RTS
  452.  
  453. GET╬UM┼XIT = *
  454.    LDX #TOKEN╬UMBER
  455.    LDY #3
  456. -  LDA NUMBER,Y
  457.    BEQ +
  458.    DEY
  459.    BPL -
  460. +  INY
  461.    RTS
  462.  
  463. CHECK─IGIT = *  ;( .┴=ASCII─IGIT ) : .┴=BIN─IGIT, .╪=ASCII─IGIT, .├├=OK
  464.    TAX
  465.    CMP #"0"
  466.    BCC CHECK┬AD
  467.    CMP #"9"+1
  468.    BCC CHECK┴ND
  469.    CMP #"A"
  470.    BCC CHECK┬AD
  471.    CMP #"F"+1
  472.    BCC +
  473.    CMP #"┴"
  474.    BCC CHECK┬AD
  475.    CMP #"╞"+1
  476.    BCS CHECK┬AD
  477. +  SEC
  478.    SBC #7
  479.    CHECK┴ND = *
  480.    AND #$0F
  481.    CMP NUM┬ASE
  482.    RTS
  483.    CHECK┬AD = *
  484.    SEC
  485.    RTS
  486.  
  487. SHIFT╬UMBER = *
  488.    LDA NUM┬ASE
  489.    CMP #10
  490.    BNE +
  491.    LDX #3
  492. -  LDA NUMBER,X
  493.    STA NUM╙AVE,X
  494.    DEX
  495.    BPL -
  496.    LDX #2
  497.    JSR ROLL╬UMBER
  498.    JSR ADD╬UMBER
  499.    LDX #1
  500.    JSR ROLL╬UMBER
  501.    RTS
  502. +  LDX #1
  503.    CMP #16
  504.    BNE +
  505.    LDX #4
  506. +  JSR ROLL╬UMBER
  507.    RTS
  508.  
  509.    ROLL╬UMBER = *  ;( .╪=TIMES )
  510.    ASL NUMBER
  511.    ROL NUMBER+1
  512.    ROL NUMBER+2
  513.    ROL NUMBER+3
  514.    BCS +
  515.    DEX
  516.    BNE ROLL╬UMBER
  517.    RTS
  518. +  PLA
  519.    PLA
  520.    SEC
  521.    RTS
  522.  
  523.    ADD╬UMBER = *
  524.    LDX #0
  525.    CLC
  526. -  LDA NUMBER,X
  527.    ADC NUM╙AVE,X
  528.    STA NUMBER,X
  529.    INX
  530.    TXA
  531.    AND #$03
  532.    BNE -
  533.    BCS +
  534.    RTS
  535. +  PLA
  536.    PLA
  537.    SEC
  538.    RTS
  539.  
  540. AS─RIVER = *
  541.    LDA #$FF
  542.    STA BUFPTR
  543.    LDA #" "
  544.    STA PREV├HAR
  545.  
  546.    NEXT╘OKEN = *
  547.    JSR STOPKEY
  548.    BCC +
  549.    LDA #1
  550.    JMP EXIT
  551. +  JSR GET╘OKEN
  552.    CPX #TOKEN╔DENTIFIER
  553.    BEQ DISP╔DENTIFIER
  554.    CPX #TOKEN╙TRING
  555.    BEQ DISP╙TRING
  556.    CPX #TOKEN╙PECIAL
  557.    BEQ DISP╙PECIAL
  558.    CPX #TOKEN╬UMBER
  559.    BEQ DISP╬UMBER
  560.    JMP NEXT╘OKEN
  561.  
  562. DISP╔DENTIFIER = *
  563.    PHA
  564.    LDA #"I"
  565.    JSR PUTCHAR
  566.    LDA #":"
  567.    JSR PUTCHAR
  568.    JSR SHOW╙TR
  569.    LDA #","
  570.    JSR PUTCHAR
  571.    PLA
  572.    SHOW├HAR = *
  573.    CMP #CHR├╥
  574.    BNE +
  575.    LDA #"_"
  576. +  JSR PUTCHAR
  577.    SHOW├╥ = *
  578.    LDA #CHR├╥
  579.    JSR PUTCHAR
  580.    JMP NEXT╘OKEN
  581.  
  582. DISP╙TRING = *
  583.    LDA #"S"
  584.    JSR PUTCHAR
  585.    LDA #":"
  586.    JSR PUTCHAR
  587.    JSR SHOW╙TR
  588.    JMP SHOW├╥
  589.  
  590. SHOW╙TR = *
  591.    LDA #<STRING┬UF
  592.    LDY #>STRING┬UF
  593.    STA ZP
  594.    STY ZP+1
  595.    LDA STRING╠EN
  596.    LDY #0
  597.    LDX #STDOUT
  598.    JSR WRITE
  599.    RTS
  600.  
  601. DISP╙PECIAL = *
  602.    CMP #CHR┼╧╞
  603.    BNE +
  604.    RTS
  605. +  PHA
  606.    LDA #"C"
  607.    JSR PUTCHAR
  608.    LDA #":"
  609.    JSR PUTCHAR
  610.    PLA
  611.    JMP SHOW├HAR
  612.  
  613. DISP╬UMBER = *
  614.    LDA #"N"
  615.    JSR PUTCHAR
  616.    LDA #":"
  617.    JSR PUTCHAR
  618.    LDA #<STRING┬UF
  619.    LDY #>STRING┬UF
  620.    STA ZP+0
  621.    STY ZP+1
  622.    LDX #NUMBER
  623.    LDA #1
  624.    JSR UTOA
  625.    STY STRING╠EN
  626.    JSR SHOW╙TR
  627.    JMP SHOW├╥
  628.  
  629. SOURCE┬UF = *
  630. STRING┬UF = SOURCE┬UF+256
  631. AS┼ND = STRING┬UF+256
  632.