"** 01-s1.pdf page 21 " s4 alloc: 0 -1 tad s.nfblks spa jmp 1f dac s.nfblks tad fblksp jms laci dac 9f+t jms copyz; dskbuf; 64 lac 9f+t jms dskwr dzm .savblk lac 9f+t jmp alloc i 1: lac s.nxfblk sna jms halt " OUT OF DISK dac s.fblks jms dskrd lac dskbuf dac s.nxfblk jms copy; dskbuf+1; s.fblks+1; 9 lac d10 dac s.nfblks jmp alloc+1 free: 0 lmq lac s.nfblks sad d10 jmp 1f tad fblksp dac 9f+t lacq dac 9f+t i dzm .savblk isz s.nfblks jmp free i 1: lac s.nxfblk dac dskbuf jms copy; s.fblks+1; dskbuf+1; 9 lacq dac s.nxfblk jms dskwr dzm .savblk lac d1 dac s.nfblks jmp free i t = t+1 laci: 0 and o17777 tad o200000 dac .+1 lac .. jmp laci i "** 01-s1.pdf page 22 " skip if AC between two values (inclusive) " jms betwen; low_ptr; high_ptr " " " listing has an alternate written in " (which would require 'lac ptr' instead of 'ptr' args?) betwen: 0 lmq cmq " get ~AC in MQ lac betwen i " get low_ptr dac 9f+t isz betwen " skip low_ptr lacq " get ~AC (-AC-1) from MQ tad 9f+t i " get low-AC-1 sma " negative (AC >= low)? jmp 1f " no, return w/o skip lac betwen i " fetch high_ptr dac 9f+t isz betwen " skip high_ptr lacq " get -AC-1 tad 9f+t i " add to high value (high-AC-1) cma " complement (AC-high) spa sna " AC-high <= 0? 1: isz betwen " no: give happy return lacq " restore ~AC cma " restore AC jmp betwen i " return w/o skip copy: 0 -1 tad copy i dac 8 isz copy -1 tad copy i dac 9 isz copy -1 tad copy i cma dac 9f+t isz copy 1: lac 8 i dac 9 i isz 9f+t jmp 1b jmp copy i copyz: 0 -1 tad copyz i dac 8 isz copyz -1 tad copyz i cma dac 9f+t isz copyz 1: dzm 8 i isz 9f+t jmp 1b jmp copyz i t = t+1 putchar: 0 "** 01-s1.pdf page 23 dac 9f+t cla jms takeq jmp putchar i tad o40001 dac .+4 lac 9f+t jms putq lac char dac q2+1 .. isz putchar jmp putchar i t = t+1 getchar: 0 jms takeq jmp i getchar tad o200001 dac .+3 cla jms putq lac q2+1 .. isz getchar jmp i getchar takeq: 0 rcl tad lacq1 dac .+7 tad o640000 dac .+17 tad d1 dac .+14 tad o500000 dac .+5 lac q1 .. sna jmp takeq i dac lnkaddr sad q1+1 .. jmp .+5 tad o200000 dac .+1 lac q2 .. jmp .+3 cla dac q1+1 .. dac q1 .. isz takeq lac lnkaddr jmp i takeq putq: 0 rcl tad dacq1 dac .+14 tad d1 dac .+13 tad o140000 dac .+1 lac q1-1 .. "** 01-s1.pdf page 24 sna jmp .+6 tad o40000 dac .+2 lac lnkaddr dac q2 .. jmp .+3 lac lnkaddr dac q1 .. dac q1+1 .. jmp putq i srcdbs: 0 dac 9f+t+2 "* lmq -ndskbs dac 9f+t law dskbs "* -1 dac 8 written dac 9f+t+1 "* lacq 1: lac 9f+t+2 "** crossed out sad 9f+t+1 "** isz 8 written jmp srcdbs i law 65 "** ??? crossed out tad 9f+t+1 "** crossed out isz 8 written isz 9f+t+1 isz 9f+t jmp 1b isz srcdbs jmp srcdbs i collapse: 0 cla jms srcdbs jmp 1f law dskbs dac 9f+t+1 "** 9f+t+1 crossed out: 8 written in 1: lac 9f+t+1 "** 9f+t+1 crossed out: 8 written in dac 0f+1 tad d65 "** crossed out: d2-- original obscured dac 0f cma tad d1 tad edskbsp and o17777 sna jmp 0f+3 dac 0f+2 jms copy; 0:..; ..; .. -65 tad edskbsp dac 9f+t tad d1 dac 0f lac dskaddr dac 9f+t i jms copy; dskbuf; 0:..; 64 jmp collapse i dskrd: 0 jms betwen; d2; d7999 "** 01-s1.pdf page 25 jms halt sad dskaddr jmp dskrd i dac dskaddr jms srcdbs jmp 1f lac dskaddr jms dskio; 06000 jmp 2f 1: dzm 9f+t+1 i law 1 tad 9f+t+1 dac .+2 jms copy; ..; dskbuf; 64 2: jms collapse jmp dskrd i dskwr: 0 jms betwen; d2; d7999 jms halt jms dskio; 07000 lac dskaddr jms srcdbs dzm 9f+t+1 i jms collapse jmp dskwr i t = t+3 " called with: " AC/ block " jms dskio; dsld_bits dskio: 0 dac dskaddr cll; idiv; 80 dac 9f+t lacq idiv; 10 dac 9f+t+1 lls 22 xor 9f+t+1 als 8 dac 9f+t+1 lac 9f+t idiv; 10 dac 9f+t lls 22 xor 9f+t xor 9f+t+1 xor o200000 dac 9f+t jms dsktrans; -64; dskbuf; 9f+t; dskio isz dskio jmp dskio i t = t+1 " called with: " jms dsktrans; -WC; MAC; addr_ptr?; dsld_ptr dsktrans: 0 -10 dac 9f+t 1: -1 tad dsktrans dac 12 "** 01-s1.pdf page 26 dscs " clear status register lac 12 i dslw " load WC lac 12 i dslm " load MAC lac 12 i jms laci dsld " load TA & SA dzm .dskb lac 12 i jms laci jms laci dsls " load status lac .dskb " check for interrupt sna jmp .-2 lac .dske " get status from interrupt sma jmp 12 i " return isz 9f+t jmp 1b jms halt " 10 disk errors t = t+1 halt: 0 isz 9f+t jmp .-1 iof hlt jms copy; law; 4096; 4096 hlt; jmp .-1 t = t+1