223 lines
3.5 KiB
ArmAsm
223 lines
3.5 KiB
ArmAsm
"** 12-92-119.pdf page 6
|
|
" space travel 2
|
|
|
|
absv: 0
|
|
dzm absx
|
|
dzm absx+1
|
|
dzm absx+2
|
|
dzm absy
|
|
dzm absy+1
|
|
dzm absy+2
|
|
1:
|
|
dac absi " absi = AC
|
|
sna
|
|
jmp i absv " while (absi) {
|
|
tad fppar
|
|
dac 9f+t
|
|
jms invert " invert(absi) -> ftmp1 = px[absi], ftmp2 = py[absi]
|
|
fld; ftmp1
|
|
fng
|
|
fad; absx
|
|
fst; absx " absx -= ftmp1
|
|
fld; ftmp2
|
|
fng
|
|
fad; absy
|
|
fst; absy " absy -= ftmp2
|
|
jms invert " invert(absi) -> ftmp1 = px[absi], ftmp2 = py[absi]
|
|
fld; ftmp1
|
|
fad; absx
|
|
fst; absx " absx += ftmp1
|
|
fld; ftmp2
|
|
fad; absy
|
|
fst; absy " absy += ftmp2
|
|
lac absi
|
|
tad ppar
|
|
dac 9f+t
|
|
lac i 9f+t " absi = ppar[absi]
|
|
jmp 1b " }
|
|
|
|
invert: 0
|
|
lac i 9f+t
|
|
dac fcplan
|
|
tad pww
|
|
dac 1f
|
|
dac 2f
|
|
lac fcplan
|
|
tad px
|
|
dac 3f
|
|
lac fcplan
|
|
tad py
|
|
dac 4f
|
|
fld; 1:..
|
|
fng
|
|
fst; 2:.. " pww[par] = -pww[par]
|
|
jms updpln " updpln()
|
|
fld; 3:..
|
|
fst; ftmp1 " ftmp1 = px[par]
|
|
fld; 4:..
|
|
fst; ftmp2 " ftmp2 = py[par]
|
|
jmp i invert
|
|
|
|
t = t+1
|
|
|
|
updpln: 0
|
|
"** 12-92-119.pdf page 7
|
|
lac fcplan
|
|
lmq
|
|
tad px
|
|
dac 1f
|
|
dac 5f
|
|
lacq
|
|
tad py
|
|
dac 3f
|
|
dac 6f
|
|
dac 0f
|
|
lacq
|
|
tad pw
|
|
dac 2f
|
|
dac 7f
|
|
lacq
|
|
tad pww
|
|
dac 4f
|
|
dac 8f
|
|
|
|
fld; 1:..
|
|
fst; ftmp1 " ftmp1 = px[fcplan]
|
|
fmp; 2:..
|
|
fst; ftmp2 " ftmp2 = ftmp1 * pw[fcplan]
|
|
fld; 3:..
|
|
fmp; 4:..
|
|
fng
|
|
fad; ftmp2
|
|
fst; 5:.. " px[fcplan] = - (py[fcplan] * pww[fcplan]) + ftmp2
|
|
fld; 6:..
|
|
fmp; 7:..
|
|
fst; ftmp2 " ftmp2 = py[fcplan] * pw[fcplan]
|
|
fld; ftmp1
|
|
fmp; 8:..
|
|
fad; ftmp2
|
|
fst; 0:.. " py[fcplan] = ftmp1 * pww[fcplan] + ftmp2
|
|
jmp updpln i
|
|
|
|
updacc: 0 " update acceleration
|
|
lac cplan
|
|
sad par
|
|
jmp upda2 " if (cplan != par) {
|
|
jms absxy " absxy(cplan)
|
|
fld; absx
|
|
fad; shipx " FAC = absx + shipx
|
|
jmp 1f " } else {
|
|
upda2:
|
|
fld; x
|
|
fng " FAC = -x
|
|
1: " }
|
|
fst; absx " absx = FAC
|
|
fmp; absx
|
|
fst; ftmp1 " ftmp1 = absx * absx
|
|
lac cplan
|
|
sad par
|
|
jmp 1f " if (cplan != par)
|
|
fld; absy
|
|
fad; shipy " FAC = absy + shipy
|
|
jmp 2f
|
|
1:
|
|
fld; y
|
|
fng " else FAC = -y
|
|
"** 12-92-119.pdf page 8
|
|
2:
|
|
fst; absy
|
|
fmp; absy
|
|
fad; ftmp1
|
|
fst; dtmp1 " dtmp1 = absy * absy + ftmp1
|
|
sqrt
|
|
fst; dpar " dpar = sqrt(dtmp1)
|
|
lac cplan
|
|
sad par
|
|
skp
|
|
jmp upda5 " if (cplan == par) {
|
|
fld; ox
|
|
fng
|
|
fad; x
|
|
fst; ftmp1 " ftmp1 = -ox + x
|
|
fmp; y
|
|
fst; horizv " horizv = ftmp1 * y
|
|
fld; y
|
|
fng
|
|
fad; oy
|
|
fst; ftmp2 " ftmp2 = -y + oy
|
|
fmp; x
|
|
fad; horizv
|
|
fdv; dpar
|
|
fst; horizv " horizv = (ftmp2 * x + horizv) / dpar
|
|
fld; dpar
|
|
fcp; rpar
|
|
sma
|
|
jmp upda5 " if (dpar < rpar) {
|
|
lac lanflg
|
|
spa
|
|
jmp upda5 " if (!lanflg) {
|
|
fld; ftmp1
|
|
fmp; ftmp1
|
|
fst; ftmp1 " ftmp1 *= ftmp1
|
|
fld; ftmp2
|
|
fmp; ftmp2
|
|
fad; ftmp1
|
|
fcp; crash
|
|
spa
|
|
jmp 1f " if (ftmp2 * ftmp2 + ftmp1 > crash) {
|
|
lac dhalt
|
|
dac goflg " goflg = true
|
|
dac crflg " crflg = true
|
|
1: " }
|
|
lac dhalt
|
|
dac lanflg " lanflg = true
|
|
fld; rpar
|
|
fdv; dpar
|
|
fst; ftmp1 " ftmp1 = rpar / dpar
|
|
fmp; x
|
|
fst; x " x *= ftmp1
|
|
fst; ox " ox = x
|
|
fld; ftmp1
|
|
fmp; y
|
|
fst; y " y *= ftmp1
|
|
fst; oy " oy = y
|
|
lac par
|
|
jms absxy " absxy(par)
|
|
jms shipxy " shipxy()
|
|
jmp upda2 " } } }
|
|
"** 12-92-119.pdf page 9
|
|
upda5:
|
|
fcp; fardst
|
|
spa
|
|
jmp 1f " if (dpar > fardst) {
|
|
lac cplan
|
|
sna
|
|
jmp 1f " if (cplan) {
|
|
lac dhalt
|
|
dac grvflg " grvflg = true
|
|
jmp i updacc " return
|
|
1: " } }
|
|
dzm grvflg " grvflg = false
|
|
lac fcplan
|
|
tad accl
|
|
dac 1f
|
|
fld; 1:..
|
|
fdv; dtmp1
|
|
fcp; maxa
|
|
spa
|
|
jmp 2f " if (accl[fcplan] / dtmp1 > maxa) {
|
|
fst; maxa " maxa = accl[fcplan] / dtmp1
|
|
lac cplan
|
|
dac maxj " maxj = cplan
|
|
2: " }
|
|
fdv; dpar
|
|
fst; ftmp1 " ftmp1 = (accl[fcplan] / dtmp1) / dpar
|
|
fmp; absx
|
|
fad; ax
|
|
fst; ax " ax += ftmp1 * absx
|
|
fld; ftmp1
|
|
fmp; absy
|
|
fad; ay
|
|
fst; ay " ay += ftmp1 * absy
|
|
jmp i updacc
|