mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-04-11 23:12:59 +00:00
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.
285 lines
3.0 KiB
ArmAsm
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
|