1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-04-11 23:12:59 +00:00
Files
DoctorWkt.unix-jun72/src/cmd/bas1.s
warren.toomey 45ebdd66d8 Warren and Doug Merritt have worked on rebuilding the code fragments from
the s1-bits tape. Doug has provided as11.s as12.s as13.s as14.s as15.s as16.s
as17.s as18.s as19.s as21.s as22.s as23.s as24.s as25.s as26.s as27.s as28.s
as29.s, and Warren has compared against his production, and against V5 (to
determine the correct trailing blank line). These files can be considered
authentic. The other file's are Warren's production only, so we need to
compare against Doug's versions to ensure correctness.
2008-05-15 00:59:49 +00:00

285 lines
3.0 KiB
ArmAsm

/ bas1 -- compile
compile:
clr forp
mov $space,r4
tst lineno
beq 1f
rts pc
1:
jsr pc,nextlin
br 1f
mov lineno,r0
jsr pc,getloc
mov r4,4(r1)
jsr pc,statement
br .+2
inc lineno
cmp r4,$espace-20.
blo 1b
jsr r5,error
<out of code space\n\0>; .even
1:
tst forp
bne 2f
mov $loop,(r4)+
rts pc
singstat:
clr forp
mov $exline,r4
jsr pc,statement
br 1f
cmp -2(r4),$_asgn
beq 1f
mov $_print,(r4)+
mov $_nline,(r4)+
1:
tst forp
bne 2f
cmp r4,$eexline
blo 1f
jsr r5,error
<out of code space\n\0>; .even
1:
mov $loop,(r4)+
mov r4,exprloc
mov $exline,r4
jmp execute
2:
jmp forer
statement:
mov $line,r3
movb (r3)+,r0
jsr pc,digit
br stat1
dec r3
jsr r5,atoi; nextc
cmp r0,$' /
beq 1f
mov $line,r3
movb (r3)+,r0
br stat1
1:
mov $_line,(r4)+
mov r1,(r4)+
stat1:
jsr pc,skip
cmp r0,$'\n
bne .+4
rts pc
mov r3,-(sp)
jsr pc,alpha
br 1f
jsr pc,name
br 1f
tst (sp)+
jsr pc,skip
dec r3
jmp *2f(r1)
2:
stlist
stdone
strun
stprint
stdisp
stif
stgoto
streturn
stfor
stnext
stoctl
stdraw
steras
1:
mov (sp)+,r3
dec r3
jsr pc,expr
cmp r0,$'\n
bne joe
add $2,(sp)
rts pc
stlist:
cmp r0,$'\n
bne 1f
clrf r0
jsr pc,const
movif $77777,r0
jsr pc,const
br 2f
1:
jsr pc,expr
cmp r0,$'\n
bne 1f
mov $_dup,(r4)+
br 2f
1:
dec r3
jsr pc,expr
cmp r0,$'\n
bne joe
2:
mov $_list,(r4)+
rts pc
stdone:
cmp r0,$'\n
bne joe
mov $_done,(r4)+
rts pc
strun:
cmp r0,$'\n
bne joe
mov $_run,(r4)+
rts pc
stdisp:
mov $_sdisp,(r4)+
jsr pc,stprint
mov $_fdisp,(r4)+
rts pc
stprint:
jsr pc,skip
cmp r0,$'\n
beq 2f
cmp r0,$'"
beq 1f
dec r3
jsr pc,expr
mov $_print,(r4)+
dec r3
br stprint
1:
mov $_ascii,(r4)+
inc r3
1:
movb (r3)+,(r4)
cmpb (r4),$'"
beq 1f
cmpb (r4)+,$'\n
bne 1b
br joe
1:
add $2,r4
bic $1,r4
movb (r3)+,r0
br stprint
2:
mov $_nline,(r4)+
rts pc
stif:
jsr pc,expr
mov $_if,(r4)+
mov r4,-(sp)
tst (r4)+
jsr pc,stat1
br .+2
mov (sp)+,r1
mov r4,(r1)
rts pc
stgoto:
jsr pc,expr
mov $_goto,(r4)+
rts pc
streturn:
cmp r0,$'\n
beq 1f
jsr pc,expr
cmp r0,$'\n
bne joe
br 2f
1:
clrf r0
jsr pc,const
2:
mov $_return,(r4)+
rts pc
joe:
jsr pc,serror
stfor:
mov r4,-(sp)
jsr pc,e2
mov r4,-(sp)
cmp r0,$'=
bne joe
tst val
bne joe
jsr pc,expr
mov forp,(r4)+ / overlay w _asgn
mov r4,forp
cmp (r4)+,(r4)+ / _tra ..
mov (sp)+,r0
mov (sp)+,r1
1:
mov (r1)+,(r4)+
cmp r1,r0
blo 1b
mov $_fori,(r4)+
mov forp,r1
mov $_tra,(r1)+
mov r4,(r1)+
dec r3
jsr pc,expr
mov $_lesseq,(r4)+
mov $_if,(r4)+
mov forp,(r4)+
mov r4,forp
cmp r0,$'\n
beq 1f
jsr pc,stat1
br .+2
br stnext
1:
rts pc
forer:
jsr r5,error; <for/next imbalance\n\0>; .even
stnext:
mov forp,r1
beq forer
mov -(r1),r0
mov -(r0),forp
mov $_ptra,(r4)+
mov $_asgn,(r0)+
cmp (r0)+,(r0)+
mov r0,(r4)+
mov r4,(r1)+
rts pc
stoctl:
jsr pc,expr
mov $_octal,(r4)+
rts pc
stdraw:
jsr pc,expr
dec r3
jsr pc,expr
cmp r0,$'\n
bne 1f
movf $one,r0
jsr pc,const
br 2f
1:
dec r3
jsr pc,expr
2:
mov $_draw,(r4)+
rts pc
steras:
mov $_erase,(r4)+
rts pc