home *** CD-ROM | disk | FTP | other *** search
- file(2,i,o)
- byte(err,i,gsa,j,val,b,ext,r,n,k,chk,tst[5],max,open)
- word(comd,sadd,curr,w,br,bw,padd,sp,base,top,alc,y)
- byte(inpf[21],outf[21],file[21],dufn[21])
- byte(line[81],stk[64],aloc[0])
-
- tabl(name)
- data('Written: by Harris Landsberg 12/18/86')
- data('for non-profit use only Revision 1.00')
- endt()
- code(' lxi h,0')
- code(' dad sp')
- code(' shld ysp')
- code(' lxi sp,ystk+60')
- code(' lhld 6')
- code(' lxi d,-3200')
- code(' dad d')
- code(' shld ytop')
- addr(aloc,base)
- movw(81H,comd)
- whil(&comd,le,' ')
- cond(&comd,eq,0) jump(nofile)
- inrw(comd)
- endl()
- asgn(0,i,j,k,ext,open)
- whil(&comd,gt,' ')
- asgn(&comd,inpf[i],file[j],dufn[k])
- case(&comd)
- when(':') asgn(0FFH,j)
- when('.') asgn(1,ext) asgn(0,file[j],dufn[k])
- endc()
- inrw(comd) inrb(i,j,k)
- endl()
- asgn(0,inpf[i],file[j],dufn[k])
- cond(ext,eq,0) scat('.HEX',inpf)
- asgn(0,i,k,ext)
- whil(&comd,le,' ')
- cond(&comd,eq,0) jump(outfl)
- inrw(comd)
- endl()
- whil(&comd,gt,' ')
- cond(&comd,eq,'.') asgn(1,ext)
- asgn(&comd,outf[i])
- inrw(comd) inrb(i)
- endl()
- dcrb(i)
- cond(outf[i],eq,':') asgn(1,k)
- inrb(i)
- $outfl asgn(0,outf[i])
- cond(i,eq,0) scpy(dufn,outf)
- cond(k,eq,1) scat(file,outf)
- cond(ext,eq,0) scat('.COM',outf)
-
- open(1,inpf,'i')
- ferr(err)
- cond(err,ne,0)
- begn()
- $nofile pstr('SOURCE ')
- call(pfile)
- pstr(' NOT FOUND')
- jump(exit)
- endb()
-
- asgn(0,gsa)
- movw(0,br,bw,padd,sadd,alc)
- $readh rstr(1,line)
- ferr(err)
- cond(err,gt,0)
- begn()
- call(pfile)
- pstr(' READ')
- call(perr)
- jump(exit)
- endb()
- cond(line,ne,':')
- begn()
- call(pinv)
- pstr('RECORD TYPE')
- jump(exit)
- endb()
- smid(line,tst,2,2) * number of bytes
- call(hexd)
- asgn(b,chk,max)
- addw(br,w,br)
- cond(b,eq,0) jump(finis)
- smid(line,tst,4,4) * load address
- call(hexd)
- addb(chk,w[0],chk)
- addb(chk,w[1],chk)
- cond(gsa,eq,0)
- begn()
- movw(w,curr,sadd,padd)
- asgn(1,gsa)
- endb()
- comp(w,lt,curr)
- begn()
- pstr('INVERTED LOAD')
- call(paddr)
- jump(exit)
- endb()
- $iscur comp(curr,ne,w)
- begn()
- asgn(0,b)
- call(load)
- inrw(curr)
- jump(iscur)
- endb()
- smid(line,tst,8,2) * Unused
- call(hexd)
- addb(chk,b,chk)
- asgn(10,n)
- forb(r,1,max) * Bytes
- smid(line,tst,n,2)
- call(hexd)
- addb(chk,b,chk)
- call(load)
- addb(n,2,n)
- next()
- smid(line,tst,n,2) * checksum
- call(hexd)
- addb(chk,b,chk)
- cond(chk,ne,0)
- begn()
- pstr('CHECK SUM')
- call(perr)
- jump(atit)
- endb()
- btow(max,w)
- addw(curr,w,curr)
- subw(curr,1,padd)
- jump(readh)
-
- $load * load into .COM file
- asgn(b,&base)
- inrw(alc,base,bw)
- comp(base,gt,top)
- begn()
- $write cond(open,eq,0) call(opout)
- addr(aloc,base)
- forw(y,1,alc)
- wchr(2,&base)
- ferr(err)
- cond(err,ne,0)
- begn()
- call(pfile)
- pstr(' WRITE')
- call(perr)
- jump(exit)
- endb()
- inrw(base)
- next()
- addr(aloc,base)
- movw(0,alc)
- endb()
- retn()
-
- $finis * Finish Off work
- call(write)
- loop(128)
- wchr(2,0)
- enlp()
- code(' lxi h,xfcb+37')
- code(' mvi c,16')
- code(' call xuusr')
- code(' inr a')
- code(' sta yerr')
- cond(err,eq,0)
- begn()
- call(pcann)
- pstr('CLOSE ')
- call(pfile)
- jump(exit)
- endb()
- prln()
- chex(sadd,file)
- zfil(file,tst,4)
- pstr('START') call(paddr)
- chex(padd,file)
- zfil(file,tst,4)
- pstr('LAST ') call(paddr)
- chex(br,file)
- zfil(file,tst,4)
- pstr('BYTES READ ',) call(ptst)
- divw(bw,128,w)
- modw(bw,128,bw)
- comp(bw,ne,0) inrw(w)
- chex(w,file)
- zfil(file,tst,2)
- pstr('RECORDS WRITTEN ') call(ptst)
- $exit code(' lhld ysp')
- code(' sphl')
- retn()
-
- $opout open(2,outf,'o')
- ferr(err)
- cond(err,ne,0)
- begn()
- call(pcann)
- pstr('CREATE ')
- call(pfile)
- jump(exit)
- endb()
- asgn(1,open)
- retn()
-
- $hexd * Test Digit for validity
- asgn(0,val,i)
- whil(tst[i],ne,0)
- asgn(tst[i],j)
- inrb(i)
- cond(j,ge,'0')
- cond(j,le,'9') cont()
- cond(j,ge,'A')
- cond(j,le,'F') cont()
- asgn(1,val)
- extl()
- endl()
- cond(val,eq,0)
- begn()
- shex(tst,w)
- wtob(w,b)
- retn()
- endb()
- call(pinv)
- pstr('HEX DIGIT')
- $atit chex(curr,file)
- zfil(file,tst,4)
- pstr(' AT ',tst)
- jump(exit)
- $pfile pstr('FILE') retn()
- $perr pstr(' ERROR') retn()
- $pinv pstr('INVALID ') retn()
- $pcann pstr('CANNOT ') retn()
- $paddr pstr(' ADDRESS ')
- $ptst pstr(tst) prln() retn()
- OR') retn()
- $pinv pstr('INVALID