diff --git a/src/other/brt.s b/src/other/brt.s new file mode 100644 index 0000000..1295ede --- /dev/null +++ b/src/other/brt.s @@ -0,0 +1,286 @@ +" brt + +jmp start + +" syscalls: + +" .save: .+1 +" .getuid: .+1 + +.open: .+1 + s 2 + n 8 + n 7 + lac sp i + dac 1f + isz sp + lac sp i + dac 2f + lac sp + tad d1 + dac sp i + isz sp + sys open; 1:0; 2:0 + dac sp i + isz sp + jmp fetch + +.read: .+1 + s 2 + n 8 + n 7 + lac sp i + dac t1 + isz sp + lac sp i + dac 1f + isz sp + lac sp i + dac 2f + lac sp + tad d1 + dac sp i + isz sp + lac t1 + sys read; 1:0; 2:0 + dac sp i + isz sp + jmp fetch + +.write: .+1 + s 2 + n 8 + n 7 + lac sp i + dac t1 + isz sp + lac sp i + dac 1f + isz sp + lac sp i + dac 2f + lac sp + tad d1 + dac sp i + isz sp + lac t1 + sys write; 1:0; 2:0 + dac sp i + isz sp + jmp fetch + +" .creat: .+1 +" .seek: .+1 +" .tell: .+1 +" .close: .+1 +" .link: .+1 +" .unlink: .+1 +" .setuid: .+1 +" .rename: .+1 +" .exit: .+1 +" .time: .+1 +" .intrp: .+1 +" .chdir: .+1 +" .chmod: .+1 +" .chown: .+1 +" .sysloc: .+1 +" .capt: .+1 +" .rele: .+1 +" .status: .+1 +" .smes: .+1 +" .rmes: .+1 +" .fork: .+1 + +" library + +.array: .+1 + s 2 + n 8 + n 7 + -1 + tad sp i + cma + tad lastv + dac lastv + lmq + lac sp + tad d1 + dac sp i + isz sp + lacq + dac sp i + isz sp + jmp fetch + +.getchr: .+1 + s 2 + n 8 + n 7 + lac sp + tad d1 + dac sp i + isz sp + jms getc + dac sp i + isz sp + jmp fetch + +.putchr: .+1 + s 2 + n 8 + n 7 + lac sp i + dac t1 + lrss 9 + jms putc + lac t1 + jms putc + jmp fetch + +.flush: .+1 + n 8 + n 7 + jms flush + jmp fetch + +getc: 0 + lac iflg + dzm iflg + sza + jmp getc i + lac cibufp + sad eibufp + jmp 1f + lac cibufp i + and o777 + dac iflg + lac cibufp i + isz cibufp + lrss 9 + jmp getc i +1: + lac .fin + sys read; ibufp: ..; 64 + sna spa + jmp 1f + tad ibufp + dac eibufp + lac ibufp + dac cibufp + jmp getc+1 +1: + lac o4 + jmp getc i + +putc: 0 + and o777 + sna + jmp putc i + lmq + lac oflg + sza + jmp 1f + lacq + alss 9 + dac cobufp i + dac oflg + jmp putc i +1: + lac cobufp i + omq + dac cobufp i + dac cobufp i + dzm oflg + isz cobufp + lac cobufp + sad eobufp + skp + jmp putc i + lac .fout + sys write; obufp: ..; 64 + lac obufp + dac cobufp + jmp putc i + +stop: + jms flush + las + sma + sys exit " sys save + sys exit + +flush: 0 + lac oflg + sza + isz cobufp + lac cobufp + cma + tad obufp + cma + sna + jmp flush i + dac 1f+1 + lac obufp + dac 1f + lac .fout + sys write; 1: ..; .. + lac obufp + dac cobufp + dzm oflg + jmp flush i + +initio: 0 + lac 017777 i + sad d4 + jmp 2f + sad d8 + jmp 1f + + law 9 + tad 017777 + dac .+3 + law 017 + sys creat; .. + spa + jmp stop + dac .fout +1: + law 5 + tad 017777 + dac .+2 + sys open; ..; 0 + spa + jmp stop + dac .fin +2: + lac lastv + dac eibufp + dac cibufp + -64 + tad lastv + dac lastv + dac ibufp + lac lastv + dac eobufp + -64 + tad lastv + dac lastv + dac obufp + dac cobufp + dzm oflg + jmp initio i + +.argv: 0 +.fin: 0 +.fout: 1 +eibufp: 0 +cibufp: 0 +iflg: 0 +eobufp: 0 +cobufp: 0 +oflg: 0 +lastv: 017770 + +o777: 0777 +d4:o4: 4 +d8: 8 \ No newline at end of file diff --git a/src/other/test.b b/src/other/test.b new file mode 100644 index 0000000..1997630 --- /dev/null +++ b/src/other/test.b @@ -0,0 +1,25 @@ +/* test.b - test program for B run-time library brt.s + + b test.b test.s + echo abcABC > abc + perl as7 --out test.out brt.s test.s bi.s + perl a7out test.out +*/ + +main { + extrn fname, fin; + auto ch; + + fin = open(fname, 0); + + goto loop; + while (ch != 04) { + putchr(ch); +loop: + ch = getchr(); + } + + flush(); +} + +fname [] 'ab','c ',' ',' ';