home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1989 October
/
64er_Magazin_89-10_1989_Markt__Technik_de_Side_A.d64
/
decomp2.src
< prev
next >
Wrap
Text File
|
2022-10-26
|
21KB
|
1,288 lines
;
div7 ldx #0 ; Division durch 7
stx $63 ; nicht unbedingt sehr
stx $64 ; schoen und schnell,
div70 sec ; aber einfach
lda back
sbc tab7,x
sta back
lda back+1
sbc tab7+1,x
sta back+1
bcc div71
lda $63
adc tab4,x
sta $63
lda $64
adc tab4+1,x
sta $64
bcc div70
div71 lda back
adc tab7,x
sta back
lda back+1
adc tab7+1,x
sta back+1
inx
inx
cpx #14
bne div70
mvw $63,back
rts
;
tab7 .wor 28672,7168,1792,448,112,28,7
tab4 .wor 4095,1023,255,63,15,3,0
;
sline jsr search ; konvertiert Zeilennr
lda $66
sec
sbc #$b0
sta back+1
pha
lda $65
pha
asl a
rol back+1
asl a
rol back+1
sta back
clc
pla
adc back
sta back
pla
adc back+1
sta back+1
rts
;
datout mvw datst,count ; datas ausgeben
lda #32
ldy wp+1
sta pt
sty pt+1
ldy #0
lda #1
sta (pt),y
iny
sta (pt),y
iny
lda #<50000
sta (pt),y
iny
lda #>50000
sta (pt),y
iny
lda #131
sta (pt),y
iny
lda #' '
sta (pt),y
dat00 lda #38
sta pt
dat01 ldy #0
lda (count),y
sta i
cmp #255
bne dat02
rts
dat02 iny
lda (count),y
cmp #','
beq dat03
cmp #':'
beq dat03
cmp #' '
bne dat02a
cpy #1
beq dat03
dat02a cpy i
bcc dat02
clc
dat03 php
ldy #0
bcc dat04
lda #'"'
sta (pt),y
inc pt
dat04 iny
lda (count),y
dey
sta (pt),y
iny
cpy i
bcc dat04
tya
adc count
sta count
bcc dat04a
inc count+1
dat04a plp
bcc dat05
lda #'"'
sta (pt),y
dat05 tya
adc pt
sta pt
ldy #0
adc (count),y
bcs dat06
cmp #66
bcs dat06
lda #','
sta (pt),y
inc pt
bne dat01
dat06 tya
sta (pt),y
lda pt
sbc #31
sta back
lda #32
sta pt
ldx #2
jsr ckout
ldy #0
dat07 lda (pt),y
jsr bsout
iny
cpy back
bne dat07
jsr clrch
ldy #2
clc
lda #10
adc (pt),y
sta (pt),y
iny
lda #0
adc (pt),y
sta (pt),y
jmp dat00
;
getst mvw count,pf ; Statement decompilieren
gs00 jsr isexpr ; Ausdruck ueberlesen
bcc gs000
jsr next
jmp gs00
gs000 jsr islet ; Zuweisung ?
bcs gs001
jmp gs03 ; nein ->
gs001 mvw count,pl ; Koennte Teil eines FOR sein
gs002 jsr next
jsr isexpr
bcs gs002
ldy #0
lda (count),y
gs01 cmp #17
beq gs010 ; for-to
cmp #18
beq gs010 ; for-to-step
jmp gs02 ; sicher eine einfache Zuweisung ->
gs010 lda #129 ; FOR
sta (pt),y
inc pt
phw pl
phw count
jsr varnam ; Variabelnname
lda #178
jsr addchr ; '='
mvw back,pl
jsr getexp ; Startausdruck
lda #164
jsr addchr ; TO
plw pl
plw count
jsr next
mvw count,pf
phw pl
ldy #0
lda (pl),y
pha
phw pt
lda #32
ldy wp+1
sta pt
sty pt+1
jsr getexp ; Variabelnname ueberlesen
plw pt
mvw back,pl
pla
cmp #17
bne gs011
jsr getexp ; Endausdruck
plw count
rts
gs011 phw pt
lda #132
ldy wp+1
sta pt
sty pt+1
jsr getexp ; Variabelnname
lda #32
sta pt
mvw back,pl
jsr getexp ; Endausdruck
lda #169 ; STEP
jsr addchr
lda #132
ldy wp+1
sta $5f
sty $60
ldy #255
gs012 iny
lda ($5f),y
sta (pt),y
bne gs012
lda #32
sta $5f
plw pt
ldy #255
gs013 iny
lda ($5f),y
sta (pt),y
bne gs013
plw count
rts
gs02 phw pl ; let
lda (pl),y
cmp #$e6
bne gs020
lda #'t'
sta (pt),y
iny
lda #'i'
sta (pt),y
iny
lda #'$'
sta (pt),y
iny
bne gs023
gs020 cmp #$e4
bcc gs022
phw pl
lda pt
pha
lda #160
sta pt
jsr getexp
mvw back,pl
pla
sta pt
plw count
jsr varna1
lda #178
jsr addchr
lda #160
ldy pt+1
sta back
sty back+1
ldy #255
gs021 iny
lda (back),y
sta (pt),y
bne gs021
plw count
rts
gs022 jsr varnam
jsr incpt
gs023 lda #178
sta (pt),y
sec
tya
adc pt
sta pt
mvw back,pl
jsr getexp
plw count
rts
gs03 cmp #16
beq gs030
jmp gs04
gs030 lda #134 ; dim
sta (pt),y
inc pt
gs031 iny
lda (count),y
pha
clc
lda #2
adc count
sta $61
ldy count+1
bcc gs032
iny
gs032 sty $62
jsr vname
jsr varnc
pla
sta back
mvw count,pl
phw count
jsr incpt
jsr getmul
plw count
mvw count,pl
jsr linend
bcs gs034
gs033 jsr next
jsr isexpr
bcs gs033
ldy #0
lda (count),y
cmp #16
beq gs035
gs034 mvw pl,count
rts
gs035 lda #','
jsr addchr
mvw pl,pf
ldy #0
jmp gs031
gs04 cmp #19 ; next (1.version)
bne gs05
lda #130
sta (pt),y
tya
iny
sta (pt),y
rts
gs05 cmp #20 ; next (2.version)
bne gs06
lda #130
sta (pt),y
inc pt
gs050 phw count
mvw count,pl
jsr getexp
plw count
mvw count,pl
jsr linend
bcs gs052
gs051 jsr next
jsr isexpr
bcs gs051
ldy #0
lda (count),y
cmp #20
beq gs053
gs052 mvw pl,count
rts
gs053 lda #','
jsr addchr
mvw pl,pf
jmp gs050
gs06 cmp #21 ; clr
bne gs07
lda #156
sta (pt),y
tya
iny
sta (pt),y
rts
gs07 cmp #23 ; poke
bne gs08
lda #151
sta (pt),y
inc pt
mvw count,pl
phw count
jsr getexp
mvw back,pl
lda #','
jsr addchr
jsr getexp
plw count
rts
gs08 cmp #24 ; sys
bne gs09
lda #158
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
jsr incpt
plw count
mvw count,pl
inc pl
bne gs080
inc pl+1
gs080 ldy #0
gs081 lda (pl),y
cmp #':'
beq gs082
sta (pt),y
iny
bne gs081
gs082 lda #0
sta (pt),y
rts
gs09 cmp #25 ; goto
bne gs10
lda #137
sta (pt),y
gs090 inc pt
iny
lda (count),y
sta back+1
iny
lda (count),y
sta back
lda 2
cmp #2
beq gs091
jsr sline
gs091 jsr cint
rts
gs10 cmp #26 ; gosub
bne gs11
lda #141
sta (pt),y
bne gs090
gs11 cmp #27 ; on - goto/gosub
beq gs110
cmp #28
bne gs12
gs110 pha
lda #145
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
plw count
mvw count,pl
pla
asl a
asl a
adc #29
jsr addchr
ldy #1
lda (count),y
lsr a
sta i
dec i
gs111 clc
lda #2
adc pl
sta pl
bcc gs112
inc pl+1
gs112 ldy #0
lda (pl),y
sta back+1
iny
lda (pl),y
sta back
lda 2
cmp #2
beq gs113
jsr sline
gs113 jsr cint
dec i
beq gs114
lda #','
jsr addchr
bcc gs111
bcs gs111
gs114 rts
gs12 cmp #29 ; return
bne gs13
lda #142
sta (pt),y
tya
iny
sta (pt),y
rts
gs13 cmp #30 ; restore
bne gs14
lda #140
sta (pt),y
tya
iny
sta (pt),y
rts
gs14 cmp #31 ; if
beq gs140
jmp gs15
gs140 lda #139
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
plw count
lda #167
jsr addchr
ldy #1
lda (count),y
adc count
sta pl
ldy count+1
bcc gs141
iny
gs141 sty pl+1
jsr next
gs142 phw pl
jsr getst
plw pl
phw count
jsr next
lda count+1
cmp pl+1
bcc gs143
lda count
cmp pl
bcc gs143
plw count
rts
gs143 pla
pla
lda #':'
jsr addchr
bcc gs142
bcs gs142
gs15 cmp #55 ; def fn
beq gs150
jmp gs16
gs150 lda #150
sta (pt),y
inc pt
lda #165
sta (pt),y
inc pt
iny
lda (count),y
sta back
iny
lda (count),y
sta back+1
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
ldy #3
lda (count),y
sta back
iny
lda (count),y
sta back+1
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
lda #178
sta (pt),y
inc pt
gs151 jsr next
jsr isexpr
bcs gs151
mvw count,pl
phw count
jsr getexp
plw count
rts
gs16 cmp #59 ; print
bcc gs1600
cmp #66
bcc gs1601
gs1600 jmp gs17
gs1601 pha
lda #153
sta (pt),y
inc pt
pla
cmp #63
bne gs1602
tya
sta (pt),y
rts
gs1602 cmp #59
beq gs1608
cmp #64
bne gs1603
lda #166
bne gs1604
gs1603 cmp #65
bne gs1605
lda #163
gs1604 sta (pt),y
inc pt
gs1605 pha
mvw count,pl
phw count
jsr getexp
plw count
jsr incpt
pla
cmp #64
bcc gs1606
lda #')'
sta (pt),y
iny
bne gs1609
gs1606 cmp #62
bne gs1607
rts
gs1607 cmp #61
bne gs1609
gs1608 lda #','
bne gs1610
gs1609 lda #';'
gs1610 sta (pt),y
iny
lda #0
sta (pt),y
clc
tya
adc pt
sta pt
jsr linen1
bcc gs1611
rts
gs1611 phw count
mvw count,pf
gs1612 jsr next
jsr isexpr
bcs gs1612
cmp #59
bcc gs1613
cmp #66
bcc gs1614
gs1613 plw count
rts
gs1614 pla
pla
lda (count),y
jmp gs1602
gs17 cmp #66 ; cmd/print#
beq gs170
jmp gs18
gs170 jsr linen1
bcc gs172
gs171 lda #157
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
plw count
rts
gs172 phw count
gs173 jsr next
jsr isexpr
bcs gs173
cmp #67
bcc gs174
cmp #70
bcc gs176
gs174 jsr linen1
bcs gs175
ldy #0
lda (count),y
cmp #59
bcc gs175
cmp #62
beq gs175
cmp #63
beq gs175
cmp #66
bcc gs173
cmp #70
bcc gs176
gs175 plw count
jmp gs171
gs176 plw count
ldy #0
lda #152
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
plw count
jsr incpt
lda #59
jsr gs1602
phw count
gs177 jsr next
jsr isexpr
bcs gs177
cmp #69
bne gs178
plw pl
rts
gs178 cmp #68
bne gs179
dec pt
lda #0
sta (pt),y
plw count
rts
gs179 phw count
mvw count,pl
jsr getexp
plw count
pla
pla
rts
gs18 cmp #70 ; get
beq gs180
cmp #71
bne gs19
gs180 lda #161
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
plw count
rts
gs19 cmp #72 ; get#/input#
beq gs190
jmp gs20
gs190 mvw count,pl
gs191 jsr next
jsr isexpr
bcs gs191
cmp #85
beq gs195
cmp #83
beq gs195
lda #161
sta (pt),y
inc pt
lda #'#'
sta (pt),y
inc pt
phw pl
phw count
jsr getexp
gs192 lda #','
jsr addchr
plw pl
plw pf
phw pl
jsr getexp
plw count
ldy #0
lda (count),y
cmp #71
bne gs193
rts
gs193 phw count
gs194 jsr next
jsr isexpr
bcs gs194
phw count
jmp gs192
gs195 lda #132
sta (pt),y
inc pt
phw pl
phw count
jsr getexp
gs196 lda #','
jsr addchr
plw pl
plw pf
phw pl
jsr getexp
plw count
ldy #0
lda (count),y
cmp #81
bne gs198
gs197 rts
gs198 cmp #83
beq gs197
phw count
gs199 jsr next
jsr isexpr
bcs gs199
phw count
jmp gs196
gs20 cmp #73 ; stop
bne gs21
lda #144
sta (pt),y
tya
iny
sta (pt),y
rts
gs21 cmp #74 ; read
beq gs210
cmp #75
bne gs22
gs210 lda #135
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
plw count
rts
gs22 cmp #76 ; wait
beq gs220
cmp #77
bne gs23
gs220 pha
lda #146
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
mvw back,pl
lda #','
jsr addchr
jsr getexp
plw count
pla
cmp #77
beq gs221
rts
gs221 phw count
mvw back,pl
lda #','
jsr addchr
jsr getexp
plw count
rts
gs23 cmp #78 ; new
bne gs24
lda #162
sta (pt),y
tya
iny
sta (pt),y
rts
gs24 cmp #79 ; end
bne gs25
lda #128
sta (pt),y
tya
iny
sta (pt),y
rts
gs25 cmp #80 ; input
bne gs26
lda #133
sta (pt),y
inc pt
gs250 jsr next
jsr isexpr
bcs gs250
cmp #60
bne gs252
phw count
mvw count,pl
jsr getexp
plw count
lda #';'
jsr addchr
gs251 jsr next
jsr isexpr
bcs gs251
gs252 pha
phw count
mvw count,pl
jsr getexp
plw count
pla
cmp #85
bcs gs253
rts
gs253 lda #','
jsr addchr
bcc gs251
bcs gs251
gs26 cmp #93 ; load/save/verify/open
bcc gs27
cmp #97
bcs gs27
cmp #96
bne gs260
lda #159
bne gs261
gs260 clc
adc #54
gs261 sta (pt),y
inc pt
phw count
iny
lda (count),y
pha
mvw count,pl
gs262 jsr getexp
mvw back,pl
pla
sec
sbc #1
bne gs263
plw count
rts
gs263 pha
lda #','
jsr addchr
bcc gs262
bcs gs262
gs27 cmp #97 ; close
bne gs28
lda #160
sta (pt),y
inc pt
phw count
mvw count,pl
jsr getexp
plw count
rts
gs28 and #255 ; Extension
bne gs29
mvw count,pl
jsr next
sec
lda count
sbc pl
sec
sbc #7
tay
dey
sty i
lda #0
sta (pt),y
gs280 lda (pl),y
dey
sta (pt),y
bne gs280
mvw pl,count
ldy i
rts
gs29 lda #':' ; unbekannt
sta (pt),y
tya
iny
sta (pt),y
rts
;
pass1 print pa1
mvw prgst,back
jsr addlin
mvw prgst,count
p100 jsr isexpr
bcc p101
jsr next
jmp p100
p101 jsr coout
ldy #0
lda (count),y
cmp #16
bne p102
jsr getarn
jmp p117
p102 cmp #25
bne p104
clc
lda #3
adc count
sta back
ldy count+1
bcc p103
iny
p103 sty back+1
jsr addlin
sec
ldy #0
bcs p105
p104 cmp #26
bne p106
p105 iny
lda (count),y
sta back+1
iny
lda (count),y
sta back
jsr addlin
jmp p117
p106 cmp #27
beq p107
cmp #28
bne p111
p107 iny
lda (count),y
clc
adc count
sta back
ldy count+1
bcc p108
iny
p108 sty back+1
jsr addlin
mvw count,p2
ldy #1
lda (p2),y
lsr a
sta i
dec i
p109 clc
lda #2
adc p2
sta p2
bcc p110
inc p2+1
p110 ldy #0
lda (p2),y
sta back+1
iny
lda (p2),y
sta back
jsr addlin
dec i
bne p109
jmp p117
p111 cmp #31
bne p113
iny
lda (count),y
ldy count+1
clc
adc count
sta back
bcc p112
iny
p112 sty back+1
jsr addlin
jmp p117
p113 cmp #29
bne p116
p114 mvw count,back
inc back
bne p115
inc back+1
p115 jsr addlin
jmp p117
p116 cmp #57
beq p114
p117 cmp #79
bne p118
jsr linen1
bcc p119
p118 jsr next
jmp p100
p119 ldy #0
lda ($63),y
iny
and ($63),y
cmp #255
bne p117
rts
;
pass2 print pa2
lda #2
sta 2
mvw prgst,count
jsr pushrg
ldy wp+1
iny
sty pt+1
p200 lda #36
sta pt
jsr coout
jsr getst
jsr incpt
p201 lda (count),y
cmp #79 : END ?
beq p205
jsr linend
bcs p203
ldy #0
lda #':'
sta (pt),y
inc pt
jsr next
phw count
jsr getst
jsr incpt
lda pt
cmp #76
bcs p204
pla
pla
jmp p201
p203 jsr next ; Zeilenende
mvw count,back
jsr addlin
jmp p200
p204 plw count ; Ueberlange Zeile: zerlegen
mvw count,back
jsr addlin
jmp p200
p205 jsr linen1
bcc p207
p206 jsr next
mvw count,back
jsr addlin
jmp p200
p207 ldy #0
lda ($63),y
iny
and ($63),y
cmp #255
bne p206
rts
;
pass3 print pa3
lda #3
sta 2
ldx #2
jsr ckout
lda #1
jsr bsout
lda #8
jsr bsout
jsr clrch
mvw prgst,count
jsr pushrg
ldy wp+1
iny
sty pt+1
p300 lda #32
sta pt
jsr coout
ldy #0
lda #1
sta (pt),y
iny
sta (pt),y
mvw count,back
jsr sline
ldy #2
lda back
sta (pt),y
iny
lda back+1
sta (pt),y
lda #36
sta pt
p301 jsr getst
jsr incpt
lda (count),y
cmp #79
beq p304
jsr linen1
bcs p302
ldy #0
lda #':'
sta (pt),y
inc pt
jsr next
jmp p301
p302 lda pt
sbc #31
sta back
lda #32
sta pt
ldx #2
jsr ckout
ldy #0
p303 lda (pt),y
jsr bsout
iny
cpy back
bne p303
jsr clrch
jsr next
jmp p300
p304 jsr linen1
bcs p302
lda pt
sbc #30
sta back
lda #32
sta pt
ldx #2
jsr ckout
ldy #0
p305 lda (pt),y
jsr bsout
iny
cpy back
bne p305
jsr clrch
phw count
jsr datout
ldx #2
jsr ckout
lda #0
jsr bsout
jsr bsout
plw count
p306 lda count
cmp vst
bne p307
lda count+1
cmp vst+1
beq p308
p307 ldy #0
lda (count),y
jsr bsout
inc count
bne p306
inc count+1
bne p306
p308 jsr clrch
rts
;
pa1 .byt 13,'pass 1:arrays/goto/gosub/if',$8d
;
pa2 .byt 13,13,'pass 2:zeilen',$8d
;
pa3 .byt 13,13,'pass 3:basicprogramm',$8d
;
coout lda count+1
jsr hout
lda count
jsr hout
lda #145
jsr bsout
lda #13
jsr bsout
rts
;
hout pha
lsr a
lsr a
lsr a
lsr a
jsr lout
pla
lout and #15
ora #$30
cmp #$3a
bcc l1
adc #6
l1 jsr bsout
rts
;
.list
;
.end