home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
89xx
/
8910a.d64
/
decomp.src
< prev
next >
Wrap
Text File
|
1995-03-30
|
24KB
|
1,403 lines
;***********************************************************
;* *
;* ─ECOMPILER FUER ├64 MIT ┴USTROCOMPILER *
;* ┬RINGT MIT DEM ┴USTROCOMPILER KOMPILIERTE *
;* ┬ASICPROGRAMM WIEDER IN EINE LESBARE ╞ORM. *
;* *
;* ╟ESCHRIEBEN 1987/88 VON ╘HOMAS ╦LAEGER *
;* *
;***********************************************************
;
;
.NOLIST
.ERROR
* = $9000
;
; ┬ETRIEBSSYSTEMROUTINEN:
;
BSOUT = $FFD2
BASIN = $FFCF
CLRCH = $FFCC
CHKIN = $FFC6
CKOUT = $FFC9
OPEN = $FFC0
CLOSE = $FFC3
FILPAR = $FFBA
FILNAM = $FFBD
LOAD = $FFD5
RESET = $FCE2
;
; ─ATENADRESSEN: (GLOBALE ─ATEN)
;
VST = $2D
ARST = $2F
AREN = $31
INST = $33
DATST = $35
PRGST = $37
COUNT = $39
;
SAVESP = $FE
;
NAMLEN = $FF
NAMBUF = $200
NAMBU2 = NAMBUF+2
;
; ─ATENADRESSEN: (LOKALE ─ATEN, WERDEN MIT PUSHRG GERETTET
; UND MIT POPRG RESTAURIERT)
;
WP = $3B
PF = $3D
PL = $3F
PT = $41
P2 = $43
PRIOR1 = $45
PRIOR2 = $46
PRIORC = $47
C = $48
I = $49
;
; HIERHER KOMMEN ╥UECKMELDUNGEN:
;
BACK = $14
;
; ─ATEN ZUR ┌EILENNUMMERIERUNG:
LINBUF = $B000
LLINE = $7A
;
; VERSCHIEDENE BENOETIGTE ═ACROS:
;
.MAC PRINT ;GIBT TEXT AUS
LDX #0
?2 LDA ?1,X
PHA
AND #$7F
JSR BSOUT
INX
PLA
BPL ?2
.MND
;
.MAC MVW ;VERSCHIEBEN VON 2-┬YTE-
LDA ?1 ;┌EIGERN
LDY ?1+1
STA ?2
STY ?2+1
.MND
;
.MAC PHW ;PUSH WORD
LDA ?1+1
PHA
LDA ?1
PHA
.MND
;
.MAC PLW ;PULL WORD
PLA
STA ?1
PLA
STA ?1+1
.MND
;
;
; ─AS ╫ERK KANN BEGINNEN:
;
JMP START
;
ERROR LDA #13 ; ╞LOPPYFEHLERKANAL ABFRAGEN
JSR BSOUT
LDX #15 ; VOM ╦OMMANDOKANAL DER ╞LOPPY
JSR CHKIN ; ╠ESEN
JSR BASIN ; ┌EICHEN HOLEN
CMP #'0' ; ╬UMMER '00' ODER '01'?
BEQ OK
CMP #'7' ; ╬UMMER '73' (╥ESETMELDUNG?)
BNE OUT
JSR BASIN
CMP #'3'
BEQ OK
PHA
LDA #'7'
JSR BSOUT
PLA
OUT JSR BSOUT ; ╞EHLERMELDUNG AUSGEBEN
JSR BASIN
CMP #$D
BNE OUT
PLA
PLA
JSR CLRCH
JMP START
OK JSR BASIN ; ╞EHLERMELDUNG NUR LESEN
CMP #$D
BNE OK
JSR CLRCH
RTS
;
TITEL .BYT $D,'DECOMPILER ZUM AUSTROCOMPILER',$8D
FNAM .BYT 'BITTE FILENAMEN EINGEBEN',$8D
INIT .BYT 'I0'
;
;
ENDE JMP RESET
;
;
START TSX
STX SAVESP
PRINT TITEL
PRINT FNAM
LDY #0
GET JSR BASIN
CMP #$D
BEQ END
CMP #95 ; "<-" ZUM ┴BBRUCH
BEQ ENDE
STA NAMBUF+2,Y
INY
BNE GET
END TYA
BEQ START
CMP #16
BCS START
STY NAMLEN
;
LDA #15 ;FEHLERKANAL OEFFNEN
LDX #8
TAY
JSR FILPAR
LDA #2
LDX #<INIT
LDY #>INIT
JSR FILNAM
JSR OPEN
;
LDA #1 ;PROGRAMM LADEN
LDX #8
LDY #0
JSR FILPAR
LDA NAMLEN
LDX #<NAMBU2
LDY #>NAMBU2
JSR FILNAM
LDX #1
LDY #8
LDA #0
JSR LOAD
JSR ERROR
;
LDA NAMLEN
ADC #2
CMP #16
BCC FILOP
LDA #16
FILOP STA NAMLEN
LDA #'B'
STA NAMBUF
LDA #'/'
STA NAMBUF+1
LDX #15
JSR CKOUT
LDA #'S' ; ALTES ┬ASIC-
JSR BSOUT ; PROGRAMM LOESCHEN
LDA #':'
JSR BSOUT
LDY #0
DELOOP LDA NAMBUF,Y
JSR BSOUT
INY
CPY NAMLEN
BNE DELOOP
LDA #13
JSR BSOUT
JSR CLRCH
JSR ERROR
LDA #2 ; AUSGABEDATEI OEFFNEN
LDX #8
LDY #1
JSR FILPAR
CLC
LDA NAMLEN
LDX #<NAMBUF
LDY #>NAMBUF
JSR FILNAM
JSR OPEN
JSR ERROR
;
LDX #11 ;╨ARAMETER HOLEN
SETPAR LDA $1784,X
STA VST,X
DEX
BPL SETPAR
;
LDA DATST+1 ; WIRKLICH AUSTRO-COMPILER-
CMP INST+1 ; CODE?
BCC NOAUST
BNE OK01
LDY DATST
CPY INST
BCC NOAUST
OK01 LDA PRGST+1
CMP DATST+1
BCC NOAUST
BNE OK02
LDY PRGST
CPY DATST
BCC NOAUST
OK02 LDA VST+1
CMP PRGST+1
BCC NOAUST
BNE OK03
LDY VST
CPY PRGST
BCC NOAUST
OK03 LDA ARST+1
CMP VST+1
BCC NOAUST
BNE OK04
LDY ARST
CPY VST
BCC NOAUST
OK04 LDA AREN+1
CMP ARST+1
BCC NOAUST
BNE VPACK
LDY AREN
CPY ARST
BCS VPACK
NOAUST PRINT NOTOK
LDX SAVESP
TXS
JMP START
NOTOK .BYT 13,'CODE NICHT OK, KEIN AUSTRO-COMPILER-',13,'PROGRAMM!!',$8D
;
VPACK MVW VST,COUNT ; ╓ARIABELNNAMEN PACKEN
MVW VST,PT
VPACK0 LDA COUNT+1
CMP ARST+1
BCC VPA00
LDA COUNT
CMP ARST
BCS VPACK1
VPA00 LDY #0
LDA (COUNT),Y
STA (PT),Y
INY
LDA (COUNT),Y
STA (PT),Y
CLC
LDA #7
ADC COUNT
STA COUNT
BCC VPA01
INC COUNT+1
VPA01 CLC
LDA #2
ADC PT
STA PT
BCC VPACK0
INC PT+1
BNE VPACK0
VPACK1 MVW PT,ARST
;
LDY #0 ; VORDEFINIERTE ┴RRAYS
LDA (INST),Y ; HOLEN
CMP #$16
BNE PDA00
JMP NOAR ; ╦EINE ┴RRAYS VORHANDEN
PDA00 MVW INST,COUNT
MVW INST,PL
JSR INTVAL ; ┴NZAHL ┴RRAYS HOLEN
INC BACK
BNE PDA01
INC BACK+1
PDA01 MVW BACK,$60 ; ╨LATZ FUER ┴RRAY-
ASL $60 ; ─ESKRIPTOREN
ROL $61 ; SCHAFFEN
CLC
LDA $60
ADC BACK
STA BACK
LDA $61
ADC BACK+1
STA BACK+1
CLC
LDA ARST
ADC BACK
STA AREN
LDA ARST+1
ADC BACK+1
STA AREN+1
;
ARLOOP JSR NEXT
LDY #0
LDA (COUNT),Y
CMP #$16 ; ┼NDE DER VORDEFINIERTEN
BEQ NOAR ; ┴RRAYS
CMP #$10 ; ─IM?
BNE ARLOOP
JSR GETARN
JMP ARLOOP
;
NOAR LDA #>LINBUF
LDY #4
STA $7B
STY $7A
LDA #$8F
LDY #0
STA WP+1
STY WP
LDA #0
STA LINBUF
STA LINBUF+1
LDA #255
STA LINBUF+2
STA LINBUF+3
LDA #$36
STA 1
JSR PASS1
JSR PASS2
JSR PASS3
LDA #2
JSR CLOSE
JMP START
;
; ************************************
; * ╒NTERPROGRAMME *
; ************************************
;
GETARN LDY #1 ; ┴RRAYPARAMETER ABLEGEN
LDA (COUNT),Y
STA $5A
INY
LDA (COUNT),Y
STA $58
INY
LDA (COUNT),Y
STA $59
INY
LDA (COUNT),Y
STA BACK+1
INY
LDA (COUNT),Y
SEC
SBC #7
STA BACK
LDA BACK+1
SBC #0
STA BACK+1
LSR A
STA $61
LDA BACK
ROR A
CLC
ADC BACK
STA BACK
LDA BACK+1
ADC $61
STA BACK+1
LDA $58
CMP #$DA
BNE AR1
LDA $59
CMP #$AA
BEQ AR3
AR1 CLC
LDA BACK
ADC ARST
STA BACK
LDA BACK+1
ADC ARST+1
STA BACK+1
LDY #2
AR2 LDA $58,Y
STA (BACK),Y
DEY
BPL AR2
AR3 RTS
;
INTVAL LDY #0
LDA (PL),Y
BMI INTV00
RTS
INTV00 STY BACK
STY BACK+1
INY
CMP #$A6
BNE INTVA1
LDA (PL),Y
STA BACK
RTS
INTVA1 CMP #$A7
BNE INTVA2
LDA (PL),Y
STA BACK+1
INY
LDA (PL),Y
STA BACK
RTS
INTVA2 CMP #$C0
AND #15
BCC INTV01
CLC
ADC #$10
INTV01 STA BACK
RTS
;
NEXTAB
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
.BYT 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 0
.BYT 6,1,1,1,1,1,1,1,0,3,3,0,0,1,1,2 1
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 2
.BYT 1,1,1,1,1,1,1,6,3,1,1,1,1,1,1,1 3
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 4
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 5
.BYT 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 6
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 7
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 8
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 9
.BYT 2,2,2,3,2,3,2,3,6,6,1,1,1,1,1,1 A
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 B
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 C
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 D
.BYT 2,2,2,3,2,3,1,0,1,2,3,4,5,6,7,8 E
.BYT 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 F
;
NEXT LDY #0
LDA (COUNT),Y
TAX
LDA NEXTAB,X
BEQ NEXTA
NEXTAD CLC
ADC COUNT
STA COUNT
BCC NEXT00
INC COUNT+1
NEXT00 RTS
NEXTA LDA (COUNT),Y
CMP #$E7
BNE NEXTB
INY
LDA (COUNT),Y
CLC
ADC #2
BCC NEXTAD
NEXTB CMP #27
BCC NEXTC
INY
LDA (COUNT),Y
BNE NEXTAD
NEXTC CMP #24
BNE NEXTD
NEXT01 INY
LDA (COUNT),Y
CMP #':'
BNE NEXT01
INY
NEXT02 TYA
BNE NEXTAD
NEXTD INY
CPY #100
BEQ NEXT02
LDA (COUNT),Y
CMP #$9E
BNE NEXTD
INY
LDA (COUNT),Y
CMP #'3'
BNE NEXTD
INY
LDA (COUNT),Y
CMP #'2'
BNE NEXTD
INY
LDA (COUNT),Y
CMP #'2'
BNE NEXTD
INY
LDA (COUNT),Y
CMP #'0'
BNE NEXTD
INY
LDA (COUNT),Y
CMP #':'
BNE NEXTD
INY
TYA
JMP NEXTAD
;
GETVAL LDY #0
LDA #$37
STA 1
LDA PRIORC
PHA
LDA (PL),Y
CMP #$A8
BNE GETINT
LDY PL+1
LDA PL
CLC
ADC #1
BCC GETV0
INY
GETV0 JSR $BBA2
JSR $BDDD
LDA #$36
STA 1
PLA
STA PRIORC
RTS
;
GETINT JSR INTVAL
LDY BACK
LDA BACK+1
JSR $B391
JSR $BDDD
LDA #$36
STA 1
PLA
STA PRIORC
RTS
;
CINT LDA #$37
STA 1
LDY BACK
LDA BACK+1
JSR $B391
JSR $BDDD
LDA #$36
STA 1
LDA #1
LDY #0
STA BACK+1
STY BACK
LDA (BACK),Y
CMP #32
BNE CINT0
INC BACK
CINT0 LDA (BACK),Y
STA (PT),Y
BEQ CINT1
INY
BNE CINT0
CINT1 RTS
;
GETSTR LDY #0
LDA #34
STA (PT),Y
GETST1 LDA (PL),Y
CPY I
BCS GETST2
INY
STA (PT),Y
BNE GETST1
GETST2 INY
LDA #34
STA (PT),Y
INY
LDA #0
STA (PT),Y
RTS
;
PUSHRG DEC WP+1
LDA WP+1
CMP AREN+1
BNE PUSHR0
JMP NOMEM
PUSHR0 LDY #0
PUSHR1 LDA $3D,Y
STA (WP),Y
INY
CPY #16
BNE PUSHR1
RTS
;
POPRG LDY #0
POPRG1 LDA (WP),Y
STA $3D,Y
INY
CPY #16
BNE POPRG1
INC WP+1
RTS
;
VARNA1 PHW COUNT
LDY #0
LDA (COUNT),Y
STY BACK+1
CMP #$E5
BNE VARN01
INY
LDA (COUNT),Y
STA BACK+1
VARN01 INY
LDA (COUNT),Y
JSR VARN5
PLW COUNT
RTS
;
VARNAM LDY #0
LDA (PL),Y
AND #$3F
STA I
CMP #32
BCS VARN1
STA BACK
STY BACK+1
JSR VNAM
JMP VARNC
VARN1 CMP #35
BNE VARN2
INY
LDA (PL),Y
STA BACK+1
INY
LDA (PL),Y
STA BACK
JSR VNAM
JMP VARNC
VARN2 BCS VARN3
AND #3
STA BACK+1
INY
LDA (PL),Y
STA BACK
JSR VNAM
VARNC LDY #0
LDA $100,Y
STA (PT),Y
BEQ VARNEN
INY
BNE VARNC+2
VARNEN MVW PL,BACK
RTS
;
VARN3 STY BACK+1
CMP #37
BNE VARN4
INY
LDA (PL),Y
STA BACK+1
VARN4 INY
LDA (PL),Y
VARN5 STA BACK
JSR ARNAM
PHA
JSR VARNC
PLA
STA BACK
JSR INCPT
GETMUL LDA #'('
STA (PT),Y
TYA
SEC
ADC PT
STA PT
JSR PUSHRG
LDA BACK
PHA
LDA #16
LDY WP+1
STA PT
STY PT+1
JSR GETEXP
LDA #116
LDY WP+1
STA P2
STY P2+1
VARNL LDA #16
STA PT
PLA
SEC
SBC #1
BNE VARNL0
JMP VARNE1
VARNL0 PHA
LDY #0
VARNL1 LDA (PT),Y
STA (P2),Y
BEQ VARNL2
INY
BNE VARNL1
VARNL2 MVW BACK,PL
JSR GETEXP
LDA #16
STA PT
LDA #44
JSR ADDCHR
LDA #116
LDY WP+1
STA P2
STY P2+1
LDY #0
VARNL3 LDA (P2),Y
STA (PT),Y
BEQ VARNL4
INY
BNE VARNL3
VARNL4 LDA #16
STA PT
JMP VARNL
VARNE1 LDY #255
VARNE2 INY
LDA (PT),Y
BNE VARNE2
LDA #')'
STA (PT),Y
TYA
PHA
MVW PT,$5F
JSR POPRG
PLA
TAY
INY
LDA #0
STA (PT),Y
DEY
VARNE3 LDA ($5F),Y
STA (PT),Y
DEY
BPL VARNE3
RTS
;
VNAM LDA BACK
ASL A
ROL BACK+1
CLC
ADC VST
STA $61
LDA BACK+1
ADC VST+1
STA $62
VNAME LDY #0
LDA ($61),Y
PHP
AND #$7F
STA $100
INY
LDA ($61),Y
PHP
AND #$7F
BEQ VNAM0
STA $100,Y
INY
VNAM0 PLP
BPL VNAM3
PLP
BMI VNAM1
LDA #'$'
BNE VNAM2
VNAM1 LDA #'%'
VNAM2 STA $100,Y
INY
BNE VNAM4
VNAM3 PLP
VNAM4 LDA #0
STA $100,Y
RTS
;
ARNAM SEC
LDA BACK
SBC #3
STA BACK
BCS ARN00
DEC BACK+1
ARN00 ASL A
TAX
LDA BACK+1
ROL A
TAY
TXA
CLC
ADC BACK
TAX
TYA
ADC BACK+1
TAY
TXA
ADC ARST
STA $61
TYA
ADC ARST+1
STA $62
JSR VNAME
LDY #2
LDA ($61),Y
RTS
;
GETEXP MVW PF,COUNT ; ╚OLT ┴USDRUCK AUS
GETEXL MVW COUNT,P2 ; DEM ╘EXT
JSR NEXT
LDA COUNT+1
CMP PL+1
BCC GETEXL
LDA COUNT
CMP PL
BCC GETEXL
LDY #0
LDA (P2),Y
STA C
CMP #7 ; ╨RIORITAET FESTSTELLEN
BCS GX000
LDA #4
BNE GETEXA
GX000 CMP #9
BCS GX001
LDA #5
BNE GETEXA
GX001 CMP #11
BCS GX002
LDA #6
BNE GETEXA
GX002 BNE GX003
LDA #8
BNE GETEXA
GX003 CMP #13
BCS GX004
LDA #2
BNE GETEXA
GX004 BNE GX005
LDA #1
BNE GETEXA
GX005 CMP #15
BCS GX006
LDA #7
BNE GETEXA
GX006 BNE GX007
LDA #7
BNE GETEXA
GX007 LDA #10
GETEXA STA PRIORC
LDA C
CMP #14
BCC GX008
JMP GETB00
GX008 JSR PUSHRG ; D1 OP D2
MVW P2,PL
LDA #132
LDY WP+1
STA PT
STY PT+1
JSR GETEXP ; HOLE D2
LDY #PRIOR2-PF
STA (WP),Y
MVW BACK,PL
LDA #32
STA PT
JSR GETEXP ; HOLE D1
LDY #PRIOR1-PF
STA (WP),Y
LDA WP+1
PHA
JSR POPRG
MVW BACK,PL
PLA
STA BACK+1
LDA #32
STA BACK
LDY #0
LDA PRIOR1 ; MUSS D1 GEKLAMMERT WERDEN ?
CMP PRIORC
BCS GX009 ; NEIN ->
LDA #'(' ; '(' IN ┴USDRUCKBUFFER
STA (PT),Y
INC PT
GX009 LDA (BACK),Y ; D1 IN ┴USDRUCKBUFFER
STA (PT),Y
BEQ GX010
INY
BNE GX009
GX010 LDA PRIOR1
CMP PRIORC
BCS GX011 ; WENN D1 GEKLAMMERT WERDEN MUSS
LDA #')' ; ')' IN ┴USDRUCKBUFFER
STA (PT),Y
INY
GX011 TYA
CLC
ADC PT
STA PT
LDY #0
LDA C
CMP #7
BCC GX012
ADC #162 ; + - * / ^ AND OR
STA (PT),Y
INY
BNE GETA00
GX012 AND #4
BEQ GX013
LDA #179 ; '<'
STA (PT),Y
INY
GX013 LDA C
AND #1
BEQ GX014
LDA #177 ; '>'
STA (PT),Y
INY
GX014 LDA C
AND #2
BEQ GETA00
LDA #178 ; '='
STA (PT),Y
INY
GETA00 TYA
CLC
ADC PT
STA PT
LDY #0
LDA #132
STA BACK
LDA PRIOR2 ; MUSS D2 GEKLAMMERT WERDEN ?
CMP PRIORC
BCC GETA01 ; UNBEDINGT ->
BNE GETA02 ; SICHER NICHT ->
LDA C
CMP #10 ; WENN OP <> '/'
BNE GETA02 ; NICHT KLAMMERN ->
DEC PRIOR2 ; MERKEN FUER 2. ╘EST
GETA01 LDA #'('
STA (PT),Y
INC PT
GETA02 LDA (BACK),Y
STA (PT),Y
BEQ GETA03
INY
BNE GETA02
GETA03 LDA PRIOR2
CMP PRIORC
BCS GETA04
LDA #')'
STA (PT),Y
INY
GETA04 LDA #0
STA (PT),Y
MVW PL,BACK
LDA PRIORC
RTS ; GESCHAFFT!
GETB00 CMP #32
BCS GETB02
GETB01 JMP GETC00
GETB02 CMP #52
BCS GETB01
JSR PUSHRG
LDA #32 ; FKT(D1)
LDY WP+1
STA PT
STY PT+1
MVW P2,PL
JSR GETEXP ; D1 HOLEN
LDA WP+1
PHA
JSR POPRG
MVW BACK,PL
PLA
STA BACK+1
LDA #32
STA BACK
LDY #0
LDA C
CLC
ADC #148
STA (PT),Y ;┐FKT IN DEN ┴USDRUCKBUFFER
INC PT
LDA #'(' ; '(' IN DEN ┴USDRUCKBUFFER
STA (PT),Y
INC PT
GETB03 LDA (BACK),Y ; D1 IN DEN ┴USDRUCKBUFFER
STA (PT),Y
BEQ GETB04
INY
BNE GETB03
GETB04 LDA #')' ; ')' IN DEN ┴USDRUCKBUFFER
STA (PT),Y
INY
LDA #0
STA (PT),Y
MVW PL,BACK
LDA PRIORC
RTS ; GESCHAFFT!
GETC00 CMP #52
BEQ GETC01
CMP #53
BNE GETD00
GETC01 ADC #147 ; FKT(D1,D2) (LEFT$,RIGHT$)
LDY #0
STA (PT),Y ; FKT IN DEN ┴US
INC PT
LDA #2
GETC02 STA BACK ; BACK := 2/3
STY BACK+1
MVW P2,PL
LDY #0
JSR GETMUL ; 2/3 ╘EILAUSDRUECKE IN ╦LAMMERN HOLEN
LDA PRIORC
RTS ; GESCHAFFT!
GETD00 CMP #54
BNE GETE00
ADC #147 ; FKT(D1,D2,D3) (MID$)
LDY #0
STA (PT),Y
INC PT
LDA #3
BNE GETC02
GETE00 CMP #$7F
BCS GETE02
GETE01 JMP GETF00
GETE02 CMP #$A6
BCS GETE01
MVW P2,PL
JSR VARNAM ; ╓ARIABLE HOLEN
LDA PRIORC
RTS
GETF00 CMP #$A6
BCS GETF02
GETF01 JMP GETG00
GETF02 CMP #$A9
BCC GETF03
CMP #$B0
BCC GETF01
CMP #$C0
BCC GETF03
CMP #$F0
BCC GETF01
GETF03 MVW P2,PL ; ╦ONSTANTE HOLEN
JSR GETVAL
LDA #1
LDY #0
STA BACK+1
STY BACK
LDA (BACK),Y
CMP #32
BNE GETF04
INC BACK
GETF04 LDA (BACK),Y
STA (PT),Y
BEQ GETF05
INY
BNE GETF04
GETF05 MVW PL,BACK
LDA PRIORC
RTS
GETG00 CMP #14 ; '-' ? (╓ORZEICHEN)
BEQ GETG01
CMP #15 ; NOT
BNE GETG10
GETG01 JSR PUSHRG
MVW P2,PL
LDA #132
LDY WP+1
STA PT
STY PT+1
JSR GETEXP
LDY #PRIOR2-PF
STA (WP),Y
LDA WP+1
PHA
JSR POPRG
MVW BACK,PL
PLA
STA BACK+1
LDY #0
LDA C
ASL A
STA BACK
SEC
LDA #213
SBC BACK
SBC C
STA (PT),Y ; ╧PERATOR MERKEN
INY
JMP GETA00
GETG10 CMP #$AA
BNE GETG20
LDY #0
LDA #255 ; ╨I
STA (PT),Y
TYA
INY
BNE GETH00
GETG20 CMP #$AB
BNE GETG30
LDY #0
LDA #'S' ; ST
STA (PT),Y
INY
LDA #'T'
STA (PT),Y
INY
BNE GETH00
GETG30 CMP #$AC
BEQ GETG31
CMP #$AF
BNE GETG40
GETG31 LDY #0
LDA #'T' ; TI/TI$
STA (PT),Y
INY
LDA #'I'
STA (PT),Y
INY
LDA C
CMP #$AC
BEQ GETH00
LDA #'$'
STA (PT),Y
INY
GETH00 LDA #0
STA (PT),Y
MVW P2,BACK
LDA PRIORC
RTS
GETG40 CMP #$E7 ; ╙TRING
BNE GETG50
MVW P2,PL
LDY #1
LDA (PL),Y
STA I
INY
BNE GETG60
GETG50 CMP #56
BEQ GETG70
AND #7 ; ╙HORTSTRING
STA I
MVW P2,PL
LDY #1
GETG60 TYA
CLC
ADC PL
STA PL
BCC GETG61
INC PL+1
GETG61 JSR GETSTR
MVW P2,BACK
LDA PRIORC
RTS
GETG70 LDY #0 ; ┴RRAYELEMENT
LDA #165
STA (PT),Y
INC PT
LDY #1
LDA (P2),Y
STA BACK+1
INY
LDA (P2),Y
STA BACK
JSR DIV7
LDA BACK
ASL A
ROL BACK+1
ADC VST
STA $61
LDA BACK+1
ADC VST+1
STA $62
JSR VNAME
JSR VARNC
LDA #'('
JSR ADDCHR
JSR PUSHRG
LDA #32
LDY WP+1
STA PT
STY PT+1
MVW P2,PL
JSR GETEXP
LDA WP+1
PHA
JSR POPRG
MVW BACK,PL
PLA
STA BACK+1
LDA #32
STA BACK
LDY #0
GETG71 LDA (BACK),Y
STA (PT),Y
BEQ GETG72
INY
BNE GETG71
GETG72 LDA #')'
STA (PT),Y
INY
LDA #0
STA (PT),Y
MVW PL,BACK
LDA PRIORC
RTS
;
;
ISEXPR LDY #0 ; ┴UF ┴USDRUCKELEMENT PRUEFEN
LDA (COUNT),Y
BEQ ISNEXP
CMP #16
BCC ISEXP
CMP #32
BCC ISNEXP
CMP #$37
BCC ISEXP
CMP #$38
BEQ ISEXP
CMP #$80
BCC ISNEXP
CMP #$C0
BCC ISEXP
CMP #$E7
BCC ISNEXP
ISEXP SEC
RTS
ISNEXP CLC
RTS
;
ISLET LDY #0 ; ┴UF ┌UWEISUNG PRUEFEN
LDA (COUNT),Y
CMP #$C0
BCC ISNLET
CMP #$E7
BCS ISNLET
SEC
RTS
ISNLET CLC
RTS
;
ADDLIN JSR SEARCH
BCC ADDL02
RTS
ADDL02 MVW LLINE,$65
CLC
LDA #2
ADC LLINE
STA LLINE
BCC ADDL03
INC LLINE+1
LDA LLINE
CMP #$D0
BCC ADDL03
JMP NOMEM
ADDL03 MVW $7A,$5F
ADDL04 LDA $65
BNE ADDL05
DEC $66
ADDL05 DEC $65
LDA $5F
BNE ADDL06
DEC $60
ADDL06 DEC $5F
LDY #0
LDA ($65),Y
STA ($5F),Y
LDA $64
CMP $66
BCC ADDL04
LDA $63
CMP $65
BCC ADDL04
LDA BACK
STA ($63),Y
INY
LDA BACK+1
STA ($63),Y
RTS
;
NOM .BYT 'NOT ENOUGH MEMORY!!',$8D
;
NOMEM PRINT NOM
LDX SAVESP
TXS
LDX #2
JSR CKOUT
LDA #0
JSR BSOUT
JSR BSOUT
JSR CLRCH
LDX #2
JSR CLOSE
JMP START
;
LINEND PHW COUNT
LDA PT
CMP #72
BCS LINE02
BCC LINEN2
LINEN1 PHW COUNT
LINEN2 JSR NEXT
MVW COUNT,BACK
JSR SEARCH
BCC LINE03
LINE02 PLW COUNT
SEC
RTS
LINE03 PLW COUNT
CLC
RTS
;
INCPT LDY #255
INCPT0 INY
LDA (PT),Y
BNE INCPT0
CLC
TYA
ADC PT
STA PT
LDY #0
RTS
;
ADDCHR PHA
LDY #255
ADDCH0 INY
LDA (PT),Y
BNE ADDCH0
PLA
STA (PT),Y
SEC
TYA
ADC PT
STA PT
LDY #0
TYA
STA (PT),Y
RTS
;
SEARCH MVW LLINE,$63
LDA #>LINBUF
LDY #0
STY $61
STA $62
SELOOP CLC
LDA $61
ADC $63
STA $65
LDA $62
ADC $64
ROR A
STA $66
LDA $65
ROR A
AND #254
STA $65
CMP $61
BNE SEL01
LDA $66
CMP $62
BNE SEL01
CLC
RTS
SEL01 LDY #1
LDA ($65),Y
CMP BACK+1
BCC SEL02
BNE SEL03
DEY
LDA ($65),Y
CMP BACK
BCC SEL02
BNE SEL03
RTS
SEL02 MVW $65,$61
JMP SELOOP
SEL03 MVW $65,$63
JMP SELOOP
;
.FIL DECOMP2.SRC