home *** CD-ROM | disk | FTP | other *** search
- ;*** AS PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:AS"
-
- JMP ASMAIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
- CHR├╥ = $0D
- CHR╤UOTE = $22
- CHR╘AB = $09
- CHR┼╧╞ = $00
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTC┬UFFER
- LDA #<PUTC┬UFFER
- LDY #>PUTC┬UFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTC┬UFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETC┬UFFER
- LDY #>GETC┬UFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETC┬UFFER
- RTS
- + SEC
- RTS
- GETC┬UFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACE┴RGV
- ADC ZP
- STA ZP
- LDA ACE┴RGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- SOURCE╞CB = 2 ;(1)
- BUFPTR = 3 ;(1)
- SOURCE╠INE = 4 ;(4)
- NUMBER = 8 ;(4)
- STRING╠EN = 12 ;(1)
- PREV├HAR = 13 ;(1)
-
- TOKEN╔DENTIFIER = 0
- TOKEN╬UMBER = 1
- TOKEN╙TRING = 2
- TOKEN╙PECIAL = 3
-
- CHR┼RR╔DENT╘OO╠ONG = $F0
- CHR┼RR╙TRING╘OO╠ONG = $F1
- CHR┼RR╬O├LOSE╤UOTE = $F2
- CHR┼RR┬AD╬UMBER = $F3
- CHR┼RR╬UM╧VERFLOW = $F4
-
- ASMAIN = *
- LDA ACE┴RGC+1
- BEQ +
- ;** USAGE ERROR!
- - RTS
- + LDA ACE┴RGC
- CMP #2
- BNE -
- LDA #1
- LDY #0
- JSR GETARG
- LDA #"R"
- JSR OPEN
- BCC +
- ;** SOURCE OPEN ERROR!
- RTS
- + STA SOURCE╞CB
- LDA #1
- STA SOURCE╠INE
- LDA #0
- STA SOURCE╠INE+1
- STA SOURCE╠INE+2
- STA SOURCE╠INE+3
- LDA #255
- STA BUFPTR
- JSR AS─RIVER
- LDA SOURCE╞CB
- JSR CLOSE
- RTS
-
- ;=FILL ENTIRE BUFFER, PAD WITH SPACES; .├╙=EOF
- FILLBUF = *
- LDA #<SOURCE┬UF
- LDY #>SOURCE┬UF
- STA ZP
- STY ZP+1
- LDA #0
- LDY #1
- STA BUFPTR
- LDX SOURCE╞CB
- JSR READ
- BNE +
- SEC
- RTS
- + CPY #1
- BCC +
- CLC
- RTS
- + TAY
- LDA #" "
- - STA SOURCE┬UF,Y
- INY
- BNE -
- CLC
- RTS
-
- GET╬EXT├HAR = *
- INC BUFPTR
- BEQ +
- - LDY BUFPTR
- LDA SOURCE┬UF,Y
- RTS
- + JSR FILLBUF
- BCC -
- LDA #CHR┼╧╞
- RTS
-
- EAT╫HITESPACE = * ;() : .┴=╬EXT├HAR
- LDA PREV├HAR
- CMP #" "
- BEQ +
- CMP #CHR╘AB
- BEQ +
- RTS
- + LDY BUFPTR
- - INY
- BEQ +
- EAT╫H├ONT = *
- LDA SOURCE┬UF,Y
- CMP #" "
- BEQ -
- CMP #CHR╘AB
- BEQ -
- STY BUFPTR
- RTS
- + JSR FILLBUF
- BCS +
- LDY #0
- JMP EAT╫H├ONT
- + LDA #CHR┼╧╞
- RTS
-
- ;===TOKEN DISPATCH===
- ;RET: .╪=TOKEN╔DENTIFIER, .┴=NEXT├HAR, .┘=STRLEN, STRING╠EN, STRING┬UF
- ; .╪=TOKEN╬UMBER, .┘=NUMLEN, NUMBER
- ; .╪=TOKEN╙TRING, .┴=FIRST├HAR,.┘=STRLEN, STRING╠EN, STRING┬UF
- ; .╪=TOKEN╙PECIAL, .┴=CHAR
-
- GET╘OKEN = *
- LDA PREV├HAR
- CMP #" "
- BNE +
- - JSR EAT╫HITESPACE
- + CMP #CHR╘AB
- BEQ -
- CMP #"@"
- BCC +
- JMP GET╔DENTIFIER
- + CMP #"'"
- BCC CMP═ORE1
- BNE +
- JMP GET╙TRING
- + CMP #"0"
- BCC TOK╙PECIAL
- CMP #":"
- BCS +
-
- TOK╬UM = *
- JMP GET╬UMBER
-
- + CMP #";"
- BNE +
- JMP EAT├OMMENT
-
- TOK╙PECIAL = *
- JMP GET╙PECIAL╘OKEN
-
- CMP═ORE1 = *
- CMP #"$"
- BCC +
- BEQ TOK╬UM
- CMP #"%"
- BEQ TOK╬UM
- JMP GET╙PECIAL╘OKEN
-
- + CMP #CHR╤UOTE
- BNE TOK╙PECIAL
- JMP GET╙TRING
-
- ;===COMMENT===
-
- EAT├OMMENT = *
- LDY BUFPTR
- - INY
- BEQ +
-
- COMMENT├HAR = *
- LDA SOURCE┬UF,Y
- CMP #CHR├╥
- BNE -
- STY BUFPTR
- JMP GET╙PECIAL╘OKEN
- + JSR FILLBUF
- BCS +
- LDY #0
- BEQ COMMENT├HAR
- + LDA #CHR┼╧╞
- JMP GET╙PECIAL╘OKEN
-
- ;===SPECIAL===
-
- GET╙PECIAL╘OKEN = *
- PHA
- CMP #CHR├╥
- BNE +
- INC SOURCE╠INE
- BNE +
- INC SOURCE╠INE+1
- BNE +
- INC SOURCE╠INE+2
- BNE +
- INC SOURCE╠INE+3
- + CMP #CHR┼╧╞
- BEQ +
- JSR GET╬EXT├HAR
- + STA PREV├HAR
- PLA
- LDX #TOKEN╙PECIAL
- RTS
-
- ;===IDENTIFIER===
-
- GET╔DENTIFIER = *
- STA STRING┬UF
- LDY #1
- STY STRING╠EN
- - JSR GET╬EXT├HAR
- CMP #"@"
- BCC IDENT┼XIT
-
- IDENT╟OOD├HAR = *
- LDY STRING╠EN
- STA STRING┬UF,Y
- INC STRING╠EN
- BNE -
- STA PREV├HAR
- LDX #TOKEN╙PECIAL
- LDA #CHR┼RR╔DENT╘OO╠ONG
- RTS
-
- IDENT┼XIT = *
- CMP #"."
- BEQ IDENT╟OOD├HAR
- CMP #"_"
- BEQ IDENT╟OOD├HAR
- CMP #"0"
- BCC +
- CMP #":"
- BCC IDENT╟OOD├HAR
- + CMP #" "
- BNE +
- - STA PREV├HAR
- JSR EAT╫HITESPACE
- + CMP #CHR╘AB
- BEQ -
- STA PREV├HAR
- LDA #0
- LDY STRING╠EN
- STA STRING┬UF,Y
- LDA PREV├HAR
- LDY STRING╠EN
- LDX #TOKEN╔DENTIFIER
- RTS
-
- ;===STRING===
-
- STR─ELIMIT = 20
-
- GET╙TRING = *
- STA STR─ELIMIT
- LDA #0
- STA STRING╠EN
- - JSR GET╬EXT├HAR
- STA PREV├HAR
- CMP #CHR┼╧╞
- BEQ STR┼OF
- CMP STR─ELIMIT
- BEQ STR┼XIT
- CMP #CHR├╥
- BEQ STR┼OF
- CMP #"\"
- BEQ STR┼SC
- GET╙TR╨UT = *
- LDY STRING╠EN
- STA STRING┬UF,Y
- INC STRING╠EN
- BNE -
- STA PREV├HAR
- LDA #CHR┼RR╙TRING╘OO╠ONG
- LDX #TOKEN╙PECIAL
- RTS
-
- STR┼SC = *
- JSR GET╬EXT├HAR
- CMP #CHR├╥
- BEQ STR┼OF
- CMP #CHR┼╧╞
- BEQ STR┼OF
- LDX #STR┼SC├HAR┼ND-STR┼SC├HAR-1
- - CMP STR┼SC├HAR,X
- BEQ +
- DEX
- BPL -
- JMP GET╙TR╨UT
- + LDA STR┼SC╘RANS,X
- JMP GET╙TR╨UT
-
- STR┼SC├HAR = *
- .ASC "\NBTRAZ'E0"
- .BYTE CHR╤UOTE
- STR┼SC├HAR┼ND = *
- STR┼SC╘RANS = *
- .BYTE 92,13,157,9,13,7,0,39,27,0,34
-
- STR┼OF = *
- LDA #CHR┼RR╬O├LOSE╤UOTE
- LDX #TOKEN╙PECIAL
- RTS
-
- STR┼XIT = *
- JSR GET╬EXT├HAR
- STA PREV├HAR
- LDA #0 ;BUT MAY CONTAIN \0
- LDY STRING╠EN
- STA STRING┬UF,Y
- LDA STRING┬UF
- LDX #TOKEN╙TRING
- RTS
-
- NUM┬ASE = 20 ;(1)
- NUM╙AVE = 21 ;(4)
-
- GET╬UMBER = *
- PHA
- LDX #3
- LDA #0
- - STA NUMBER,X
- DEX
- BPL -
- PLA
- LDX #16
- CMP #"$"
- BEQ +
- LDX #2
- CMP #"%"
- BEQ +
- LDX #10
- STX NUM┬ASE
- BNE GOT╬EXT─IGIT
- + STX NUM┬ASE
- JSR GET╬EXT├HAR
- STA PREV├HAR
- JSR CHECK─IGIT
- BCC +
- LDA #CHR┼RR┬AD╬UMBER
- LDX #TOKEN╙PECIAL
- RTS
- + TXA
- JMP GOT╬EXT─IGIT
-
- NEXT─IGIT = *
- JSR GET╬EXT├HAR
- STA PREV├HAR
- CMP #"_"
- BEQ NEXT─IGIT
- GOT╬EXT─IGIT = *
- JSR CHECK─IGIT
- BCS GET╬UM┼XIT
- PHA
- JSR SHIFT╬UMBER
- BCS OVERFLOW┼XIT╨LA
- PLA
- CLC
- ADC NUMBER
- STA NUMBER
- BCC +
- INC NUMBER+1
- BNE +
- INC NUMBER+2
- BNE +
- INC NUMBER+3
- BEQ OVERFLOW┼XIT
- + JMP NEXT─IGIT
-
- OVERFLOW┼XIT╨LA = *
- PLA
- OVERFLOW┼XIT = *
- LDX #TOKEN╙PECIAL
- LDA #CHR┼RR╬UM╧VERFLOW
- RTS
-
- GET╬UM┼XIT = *
- LDX #TOKEN╬UMBER
- LDY #3
- - LDA NUMBER,Y
- BEQ +
- DEY
- BPL -
- + INY
- RTS
-
- CHECK─IGIT = * ;( .┴=ASCII─IGIT ) : .┴=BIN─IGIT, .╪=ASCII─IGIT, .├├=OK
- TAX
- CMP #"0"
- BCC CHECK┬AD
- CMP #"9"+1
- BCC CHECK┴ND
- CMP #"A"
- BCC CHECK┬AD
- CMP #"F"+1
- BCC +
- CMP #"┴"
- BCC CHECK┬AD
- CMP #"╞"+1
- BCS CHECK┬AD
- + SEC
- SBC #7
- CHECK┴ND = *
- AND #$0F
- CMP NUM┬ASE
- RTS
- CHECK┬AD = *
- SEC
- RTS
-
- SHIFT╬UMBER = *
- LDA NUM┬ASE
- CMP #10
- BNE +
- LDX #3
- - LDA NUMBER,X
- STA NUM╙AVE,X
- DEX
- BPL -
- LDX #2
- JSR ROLL╬UMBER
- JSR ADD╬UMBER
- LDX #1
- JSR ROLL╬UMBER
- RTS
- + LDX #1
- CMP #16
- BNE +
- LDX #4
- + JSR ROLL╬UMBER
- RTS
-
- ROLL╬UMBER = * ;( .╪=TIMES )
- ASL NUMBER
- ROL NUMBER+1
- ROL NUMBER+2
- ROL NUMBER+3
- BCS +
- DEX
- BNE ROLL╬UMBER
- RTS
- + PLA
- PLA
- SEC
- RTS
-
- ADD╬UMBER = *
- LDX #0
- CLC
- - LDA NUMBER,X
- ADC NUM╙AVE,X
- STA NUMBER,X
- INX
- TXA
- AND #$03
- BNE -
- BCS +
- RTS
- + PLA
- PLA
- SEC
- RTS
-
- AS─RIVER = *
- LDA #$FF
- STA BUFPTR
- LDA #" "
- STA PREV├HAR
-
- NEXT╘OKEN = *
- JSR STOPKEY
- BCC +
- LDA #1
- JMP EXIT
- + JSR GET╘OKEN
- CPX #TOKEN╔DENTIFIER
- BEQ DISP╔DENTIFIER
- CPX #TOKEN╙TRING
- BEQ DISP╙TRING
- CPX #TOKEN╙PECIAL
- BEQ DISP╙PECIAL
- CPX #TOKEN╬UMBER
- BEQ DISP╬UMBER
- JMP NEXT╘OKEN
-
- DISP╔DENTIFIER = *
- PHA
- LDA #"I"
- JSR PUTCHAR
- LDA #":"
- JSR PUTCHAR
- JSR SHOW╙TR
- LDA #","
- JSR PUTCHAR
- PLA
- SHOW├HAR = *
- CMP #CHR├╥
- BNE +
- LDA #"_"
- + JSR PUTCHAR
- SHOW├╥ = *
- LDA #CHR├╥
- JSR PUTCHAR
- JMP NEXT╘OKEN
-
- DISP╙TRING = *
- LDA #"S"
- JSR PUTCHAR
- LDA #":"
- JSR PUTCHAR
- JSR SHOW╙TR
- JMP SHOW├╥
-
- SHOW╙TR = *
- LDA #<STRING┬UF
- LDY #>STRING┬UF
- STA ZP
- STY ZP+1
- LDA STRING╠EN
- LDY #0
- LDX #STDOUT
- JSR WRITE
- RTS
-
- DISP╙PECIAL = *
- CMP #CHR┼╧╞
- BNE +
- RTS
- + PHA
- LDA #"C"
- JSR PUTCHAR
- LDA #":"
- JSR PUTCHAR
- PLA
- JMP SHOW├HAR
-
- DISP╬UMBER = *
- LDA #"N"
- JSR PUTCHAR
- LDA #":"
- JSR PUTCHAR
- LDA #<STRING┬UF
- LDY #>STRING┬UF
- STA ZP+0
- STY ZP+1
- LDX #NUMBER
- LDA #1
- JSR UTOA
- STY STRING╠EN
- JSR SHOW╙TR
- JMP SHOW├╥
-
- SOURCE┬UF = *
- STRING┬UF = SOURCE┬UF+256
- AS┼ND = STRING┬UF+256
-