; ;/MPS-2000 MONITOR V 1.0 COMET/ ;/COPYRIGHT MOGENS PELLE OG GROSBOELL-POULSEN/ ;DATO:11-1-81 ; .ORG 0f000h base = $ rst7 = 38H ; ;I/O-ENHEDER ; tti = 0C0H tto = 0C0H tts = 0C1H ; mcrtd0 = 0D0H mcrtd1 = 0D1H crti = 0D2H crto = 0D2H crts = 0D3H ; ; ; false = 0 true = 0FFH cr = 0DH lf = 0AH esc = 1BH bell = 7 rub = 0FFH fil = 0 max = 7 initty = 0CEH inittz = 027H ioff = 0DFH obpnt = 0ECH ibpnt = 0EDH flram = 20H lpsp = 0F1H lpdp = 0F0H empty = 10H busy = 20H strobe = 0 lpdc = 0F2H lpsc = 0F3H srdp = lpsp dc1 = 11H ; ; ; cmsk = 11111100b rmsk = 11110011b pmsk = 11001111b lmsk = 00111111b ; ; ctty = 0 ccrt = 1 batch = 2 cuser = 3 ; ; rtty = 0 rbuf = 4 rcas = 8 ruser = 0ch ; ; ; ptty = 0 pbuf = 10h pcas = 20h puser = 30h ; ; ; ltty = 0 lcrt = 40h line = 80h luser = 0c0h ; ; ; ciloc = 0f1h coloc = 0f4h ruloc = 0f7h puloc = 0fah luloc = 0fdh csloc = 0eeh ; ; jp begin jp ci jp ri jp co jp po jp lo jp csts jp iochk jp ioset jp memck trap jp restart jp expr jp clrscr jp screen ; ;Navn: msg .byte cr,lf,0,0,0 .byte "MPS-2000 MONITOR V 1.S" .byte cr .byte "COPYRIGHT (C) 1980 DANSK SYSTEMPROGRAMMEL & " .byte "METANIC APS" .byte cr msgl = $-msg ; ;Initialisering. og start ; begin di ld de,0ff40h dlaya dec d jp nz,dlaya dec e jp nz,dlaya ld hl,stabel ld b,12 ld c,0 crti30 ld a,c out (mcrtd0),a inc c ld a,(hl) out (mcrtd1),a inc hl djnz crti30 ld a,initty out (tts),a ld a,1 out (0e8h),a out (0e9h),a ld a,47h out (0eah),a ld a,34h out (0eah),a ld a,inittz out (tts),a ld a,0fh out (lpdc),a ld a,0cfh out (lpsc),a ld a,0f0h out (lpsc),a ld a,0fh out (srdp),a ld a,3 out (lpdc),a ld a,dc1 out (lpdp),a in a,(lpsp) set strobe,a out (lpsp),a ld sp,ahead - 4 jp memsiz + 1 .word ahead ahead ld sp,hl ex de,hl ld bc,endx - exit ld hl,exit ldir ex de,hl ld bc,-6fh add hl,bc push hl ld bc,retur ld (hl),c inc hl ld (hl),b ld hl,0 ld b,10 stkit push hl djnz stkit ld c,line | pcas | rcas | ccrt call ioset ld hl,0 call abg call clrscr ld a,erf ld b,obpnt - erf + 1 ld c,0 ini call wmem inc a djnz ini ld a,0c3h ;jmp ud i 66h ld (66h),a ld hl,restart ld (67h),a ld bc,6c3h ld a,csloc-3 ini1 add a,3 call wmem djnz ini1 call inibuf hello ld b,msgl call tom start ld de,start push de call crlf ld c,':' call co star0 call ti and 7fh jr z,star0 sub '0' ret m cp 'Z'-'0'+1 ret nc add a,a ld b,0 ld c,a ld hl,tbl add hl,bc ld e,(hl) inc hl ld d,(hl) ex de,hl call blk ld c,2 jp (hl) ; ;Kommandotabel tbl .word csvek .word civek .word covek .word ruvek .word puvek .word luvek .word seks .word strsg .word inp8 .word dmp8 .word error .word baand .word inibuf .word sunit .word inobuf .word error .word error .word assign .word back .word comp .word disp .word eof .word fill .word goto .word hexn .word iport .word test .word kin .word load .word move .word null .word oport .word puta .word qout .word read1 .word subs .word type .word unld .word verify .word write1 .word xam .word where .word size .block 2 ; ; stabel .byte 63h .byte 40h .byte 4dh .byte 0ah .byte 19h .byte 00h .byte 10h .byte 13h .byte 00h .byte 0bh .byte 60h .byte 08h ; ; inibuf ld a,ibpnt ld c,0ffh jr wmem ; inobuf ld a,obpnt ld c,0 jr wmem ; sunit call expr1 pop bc ld a,c and 1 ld c,a ld a,unit jr wmem ; assign call ti ld hl,ltbl ld bc,400h ld de,5 ass0 cp (hl) jr z,ass1 add hl,de inc c jr nz,ass0 jr asserr ass1 ld e,c ass2 call ti cp '=' jr nz,ass2 call ti ld bc,400h ass3 inc hl cp (hl) jr z,ass4 inc c djnz ass3 asserr jp error ass4 ld a,3 inc e ass5 dec e jr z,ass6 sla c sla c rla rla jr ass5 ass6 cpl ld d,a ass7 call pchk jr nc,ass7 call iochk and d or c ld c,a ; ; ioset ld a,ioff wmem push hl ld hl,0 add hl,sp ld l,a ld (hl),c pop hl ret ; ; iochk ld a,ioff rmem push hl ld hl,0 add hl,sp ld l,a ld a,(hl) pop hl ret ; csvek call vekin ld a,csloc + 1 jr vekud civek call vekin ld a,ciloc + 1 jr vekud covek call vekin ld a,coloc + 1 jr vekud ruvek call vekin ld a,ruloc + 1 jr vekud puvek call vekin ld a,puloc + 1 jr vekud luvek call vekin ld a,luloc + 1 vekud call wmem inc a ld c,b jr wmem vekin call expr1 pop bc ret ; puta call expr1 call crlf pop hl puta1 call ki cp esc jp z,lfadr cp '-' jr z,puta3 ld (hl),a ld c,a inc hl puta2 call co jr puta1 puta3 dec hl ld c,(hl) jr puta2 ; ; comp ld a,80h ex af,af' call exlf call casrak comnn call riff cp 0 jr z,comnn comff call riff cp 0ffh jr z,comff jr comd1 comd call riff comd1 cp (hl) call nz,cerr ld a,erro2 call rmem and 4 jp nz,error call hilo jr nc,comd jp read2 ; ; cerr ld b,a call hlsp ld a,(hl) call lbyte call blk ld a,b call lbyte jp crlf ; ; disp call exlf disd0 call lfadr disd1 call blk ld a,(hl) call lbyte call hilox ld a,l and 0fh jr nz,disd1 jr disd0 ; ; eof call expr1 eof1 call peol ld c,':' call po xor a call pbyte pop hl call padr ld hl,0 call padr jp null ; ; fill call expr3 fif ld (hl),c ld a,c cp (hl) jr z,fihp ader call lfadr jp error fihp call hilo jr nc,fif pop de jp start ; ; goto call pchk jr c,gotg3 jr z,gotg0 call exf pop de ld hl,ploc add hl,sp ld (hl),d dec hl ld (hl),e ld a,b cp cr jr z,gotg3 gotg0 ld d,2 ld hl,tloc add hl,sp gotg1 push hl call expr1 ld e,b pop bc pop hl ld a,b or c jr z,gotg2 ld (hl),c inc hl ld (hl),b inc hl ld a,(bc) ld (hl),a inc hl ld a,0ffh ld (bc),a gotg2 ld a,e cp cr jr z,gotg2a dec d jr nz,gotg1 gotg2a ld a,0c3h ld (rst7),a ld hl,trap ld (rst7+1),hl gotg3 call crlf pop de ld hl,22 add hl,sp jp (hl) ; ; test call exlf test1 ld a,(hl) ld b,a cpl ld (hl),a xor (hl) jr z,test2 push de ld d,b ld e,a call hlsp call bits call crlf ld b,d pop de test2 ld (hl),b call hilox jr test1 ; ; move call expr3 movm ld a,(hl) ld (bc),a ld a,(bc) cp (hl) jr z,movm1 push bc pop hl jp ader movm1 inc bc call hilox jr movm ; ; read1 call read read2 call iochk and ~rmsk cp rcas jp z,rdfin ret read ld a,81h ex af,af' call expr1 ld a,b sub cr ld b,a ld c,a pop de jr z,rer0 call expr1 pop bc rer0 ex de,hl exx call crlf call casrak lod0 call rix sub ':' ld b,a and 0feh jr nz,lod0 ld d,a call sbyte ld e,a call sbyte push af call sbyte exx pop de ld e,a push bc push de push hl add hl,de ex (sp),hl pop ix exx pop hl call sbyte dec a ld a,b pop bc jr nz,rea add hl,bc add ix,bc rea inc e dec e jr z,done dec a jr z,lodr rel1 call sbyte call store jr nz,rel1 lod4 call sbyte jr z,lod0 err3 push ix pop hl call ladr err2 jp error done ld a,h or l ret z ex de,hl ld hl,ploc + 2 add hl,sp ld (hl),d dec hl ld (hl),e ret lodr ld l,1 lodl1 call lodcb jr c,lodl3 lodl5 call store jr nz,lodl1 jr lod4 lodl3 ld c,a call lodcb ld b,a exx push bc exx ex (sp),hl add hl,bc ld a,l call store ld a,h pop hl jr lodl5 lodcb dec l jr nz,lodlc1 call sbyte dec e ld h,a ld l,8 lodlc1 call sbyte sla h ret sbyte push bc call ribble rlca rlca rlca rlca ld c,a call ribble or c ld c,a add a,d ld d,a ld a,c pop bc ret store ld (ix+0),a cp (ix) jr nz,err3 inc ix dec e ret ; ; subs call expr1 pop hl subs0 ld a,(hl) call lbyte call copck ret c jr z,subs1 cp '_' jr z,subs2 push hl call exf pop de pop hl ld (hl),e ld a,e cp (hl) jp z,ader ld a,b cp cr ret z subs1 inc hl subs3 ld a,l and 7 call z,lfadr jr subs0 subs2 dec hl jr subs3 ; ; type call exlf typt0 call lfadr ld b,48 typt1 ld a,(hl) and 7fh cp ' ' jr nc,typt3 typt2 ld a,'.' typt3 cp 7fh jr nc,typt2 ld c,a call co call hilox djnz typt1 jr typt0 ; ; where ld d,0 whew0 call expr1 pop hl ld h,l push hl inc sp inc d ld a,b sub cr jr nz,whew0 ld b,a ld c,a ld h,a ld l,d dec l add hl,sp push hl push bc findc push bc call crlf pop bc find1 pop hl pop ix ld e,d ld a,(ix + 0) cpir jp po,done2 push ix push hl found dec e jr z,tell ld a,(ix - 1) cp (hl) jr nz,find1 inc hl dec ix jr found tell pop hl push hl dec hl push bc call ladr pop bc jr findc done2 inc sp dec e jr nz,done2 ret ; ; write1 call write call iochk and ~pmsk cp pcas jr z,wrihop cp pbuf ret nz wrihop ld hl,star0 push hl jp eof1 write ld a,81h ex af,af' call exlf call wait call caswak call lead wriw0 call peol ld bc,':' call po push de push hl wriw1 inc b call hilo jr c,wriw4 ld a,24 sub b jr nz,wriw1 pop hl call wriw2 pop de jr wriw0 wriw2 ld d,a ld a,b call pbyte call padr xor a call pbyte wriw3 ld a,(hl) call pbyte inc hl djnz wriw3 xor a sub d jp pbyte wriw4 pop hl pop de xor a jr wriw2 ; ; xam call ti ld hl,actbl cp cr jr z,xamx6 cp 27h ;' jr nz,xamx0 ld hl,prmtb call ti cp cr jr z,xamx6 xamx0 cp (hl) jr z,xamx1 bit 7,(hl) jp nz,error inc hl inc hl jr xamx0 xamx1 call blk xamx2 inc hl ld a,(hl) ld b,a and 3fh ex de,hl ld l,a ld h,0 add hl,sp ex de,hl inc hl ld a,(de) call lbyte bit 7,b jr z,xamx3 dec de ld a,(de) call lbyte xamx3 call copck ret c jr z,xamx5 push hl push bc call exf pop hl pop af push bc push af ld a,l ld (de),a pop bc bit 7,b jr z,xamx4 inc de ld a,h ld (de),a xamx4 pop bc pop hl ld a,b cp cr ret z xamx5 bit 7,(hl) ret nz jr xamx2 xamx6 call crlf xamx7 ld a,(hl) inc hl or a ret m ld c,a call co ld c,'=' call co ld a,(hl) ld b,a and 3fh inc hl ex de,hl ld l,a ld h,0 add hl,sp ex de,hl bit 6,b jr nz,xamx9 ld a,(de) call lbyte bit 7,b jr z,xamx10 dec de ld a,(de) xamx8 call lbyte xamx10 call blk jr xamx7 xamx9 push hl ld a,(de) ld h,a dec de ld a,(de) ld l,a ld a,(hl) pop hl jr xamx8 ; ; tom ld hl,msg tom1 ld c,(hl) inc hl call co djnz tom1 abort call csts or a ret z ; cchk call ki cp esc ret nz ; ; error call memsiz ld de,-22 add hl,de ld sp,hl ld hl,start push hl ld c,'?' call co ld a,iorun call rmem or a ret z ld a,rset out (wr0),a jp inte2 ; ; riff call ri jr c,error cp d ret ; ; size call memsiz ld bc,endx - exit +flram add hl,bc ; lfadr call crlf ; hlsp call ladr ; blk ld c,' ' ; co call iochk and ~cmsk jr nz,co0 ; ttyout in a,(tts) and 1 jr z,ttyout ld a,c out (tto),a ret ; co0 dec a jr nz,co1 ; crtout ld a,lf cp c ret z xor a cp c ret z exx push bc push de push hl exx push bc push de push hl ld de,1 call aaaa dec h ld (hl),c call screen pop hl pop de pop bc exx pop hl pop de pop bc exx ld a,c ret ; co1 dec a jr z,lo push hl ld hl,0 add hl,sp ld l,coloc ex (sp),hl ret ; ;LISTER-DEVICES ; lo call iochk and ~lmsk jr z,ttyout cp lcrt jr nz,loli call crtout cp lf ret nz call crtin cp esc jp z,error ex af,af' ld a,c ret loli cp line jr z,lnloc push hl ld hl,0 add hl,sp ld l,luloc ex (sp),hl ret ; peol ld c,cr call po ld c,lf ; po call iochk and ~pmsk jr z,ttyout cp pcas jr nz,po1 ; po0 call inte ld a,wrr out (wr1),a ld a,c out (wr2),a ret ; po1 cp pbuf jp z,obuf push hl ld hl,0 add hl,sp ld l,puloc ex (sp),hl ret ; lnloc in a,(lpsp) and empty + busy cp empty + busy jr nz,lnloc ld a,c out (lpdp),a in a,(lpsp) res strobe,a out (lpsp),a set strobe,a out (lpsp),a ld a,c ret ; unld ld a,80h ex af,af' call exlf call wait unlddi call caswak call lead call mark unlu ld c,(hl) call po call hilo jr nc,unlu call mark ; null call trail ; wait1 call iochk and ~pmsk cp pcas jp z,wrfin wait call iochk and ~cmsk | ~pmsk ret nz jp star0 ; ; conv and 0fh add a,90h daa adc a,40h daa ld c,a ret ; ; exlf call expr pop de pop hl ; crlf push hl ld b,5 call tom pop hl ret ; ; csts call iochk and ~cmsk jr nz,cs0 in a,(tts) cpl jr cs1 cs0 dec a jr nz,cs3 in a,(crts) cs1 and 2 ld a,false cs2 ret nz cpl ret cs3 dec a ret z push hl ld hl,0 add hl,sp ld l,csloc ex (sp),hl ret ; ; expr3 inc c call expr call crlf pop bc pop de pop hl ret ; ; expr1 ld c,1 expr ld hl,0 ex0 call ti ex1 ld b,a call nibble jr c,expex2 add hl,hl add hl,hl add hl,hl add hl,hl or l ld l,a jr ex0 expex2 ex (sp),hl push hl ld a,b call qchk jr nc,expex3 dec c ret z expex3 jp z,error dec c jr nz,expr ret exf ld c,1 ld hl,0 jr ex1 ; ; hilox call hilo ret nc pop de ret ; hilo inc hl ld a,h or l scf ret z ld a,e sub l ld a,d sbc a,h ret ; ; hexn call exlf push hl add hl,de call hlsp pop hl or a sbc hl,de call ladr add hl,de call crlf ld b,h call overz ld b,l jp overz ; ladr ld a,h call lbyte ld a,l lbyte push af rrca rrca rrca rrca call lby2 pop af lby2 call conv jp co ; ; mark ld bc,08ffh jr le0 ; trail ld bc,0ff00h jr le0 ; lead ld bc,4800h le0 call po djnz le0 ret ; ; memck push hl call memsiz ld a,l sub 4ch jr nc,memb dec h memb ld b,h pop hl ret ; memsiz push bc ld hl,0ecffh memsm0 dec h ld a,(hl) cpl ld (hl),a cp (hl) cpl ld (hl),a jr nz,memsm0 ld bc,exit - endx - flram add hl,bc pop bc ret ; ; ribble call rix nibble sub '0' ret c cp 'G' - '0' ccf ret c cp 10 ccf ret nc sub 'A' - '9' - 1 cp 0ah ret ; ; padr ld a,h call pbyte ld a,l ; pbyte push af rrca rrca rrca rrca call conv call po pop af push af call conv call po pop af add a,d ld d,a ret ; ; copck ld c,'-' call co ; pchk call ti ; qchk cp ' ' ret z cp ',' ret z cp cr scf ret z ccf ret ; ; ci call iochk and ~cmsk jr nz,ci1 ttyin in a,(tts) and 2 jr z,ttyin in a,(tti) ret ; ci1 dec a jr nz,ci2 ; crtin in a,(crts) and 2 jr nz,crtin in a,(crti) ret ; ci2 dec a jr z,ri push hl ld hl,0 add hl,sp ld l,ciloc ex (sp),hl ret ; ; ri call iochk and ~rmsk jr nz,ricas1 ; ritt call ttyin or a ret ; ricas1 cp rcas jr nz,ribuf ; ricas call inte call rdint1 jp nz,abend in a,(rr2) or a ret ; ribuf cp rbuf jp z,ibuf push hl ld hl,0 add hl,sp ld l,ruloc ex (sp),hl ret ; rix call riff and 7fh ret ; ; load ld a,80h ex af,af' call expr1 pop hl loaddi call crlf call casrak ld d,0ffh ddil0 ld b,4 ddil1 call riff jr nz,ddil0 djnz ddil1 ddil2 call riff jr z,ddil2 ld (hl),a ddil3 inc hl call riff jr z,ddiel ld (hl),a jr ddil3 ddiel ld e,1 ddiel0 call riff jr nz,ddiel1 inc e ld a,max cp e jr nz,ddiel0 call read2 jp lfadr ddiel1 ld (hl),d inc hl dec e jr nz,ddiel1 ld (hl),a jr ddil3 ; retur dec sp dec sp dec sp dec sp ; restart di push hl push de push bc push af call memsiz ex de,hl ld hl,10 add hl,sp ld b,4 ex de,hl restr0 dec hl ld (hl),d dec hl ld (hl),e pop de djnz restr0 pop bc dec bc ld sp,hl ld hl,tlocx add hl,sp ld a,(hl) sub c inc hl jr nz,restr1 ld a,(hl) sub b jr z,restr3 restr1 inc hl inc hl ld a,(hl) sub c jr nz,restr2 inc hl ld a,(hl) sub b jr z,restr3 restr2 inc bc restr3 ld hl,llocx add hl,sp ld (hl),e inc hl ld (hl),d inc hl inc hl ld (hl),c inc hl ld (hl),b push bc ld c,'@' call co pop hl call ladr ld hl,tlocx add hl,sp ld bc,200h restr4 ld e,(hl) ld (hl),c inc hl ld d,(hl) ld (hl),c inc hl ld a,e or d jr z,restr5 ld a,(hl) ld (de),a restr5 inc hl djnz restr4 ex af,af' exx push hl push de push bc push af push ix push iy ld a,i ld b,a ld a,r ld c,a push bc jp start ; ; ki call ci and 7fh ret ; ti call ki inc a ret m dec a ret z cp 'N' ret z cp 6eh jr z,tit cp cr ret z push bc ld c,a call co ld a,c pop bc cp 'A' - 1 ret c cp 7ah + 1 ret nc tit and 5fh ret ; ; iport call expr1 pop bc in e,(c) bits ld b,8 ipq2 call blk sla e ld a,'0' > 1 adc a,a ld c,a call co djnz ipq2 ret oport call expr pop de pop bc out (c),e ret ; ; verify call expr3 verio ld a,(bc) cp (hl) jr z,verib push bc call cerr pop bc verib inc bc call hilox jr verio ; qout ld a,80h ex af,af' call exlf call iochk push af and pmsk or pcas call resaf + 1 call unlddi jr resaf ; kin ld a,80h ex af,af' call expr1 pop hl call iochk push af and rmsk or rcas call resaf + 1 call loaddi resaf pop af ld c,a jp ioset ; ;I/O-TABEL ; ltbl .byte 'C' .byte 'T' .byte 'C' .byte 'B' .byte 'U' ; .byte 'R' .byte 'T' .byte 'B' .byte 'C' .byte 'U' ; .byte 'P' .byte 'T' .byte 'B' .byte 'C' .byte 'U' ; .byte 'L' .byte 'T' .byte 'C' .byte 'L' .byte 'U' ; ; exit pop bc ld a,c ld r,a ld a,b ld i,a pop iy pop ix pop af pop bc pop de pop hl ex af,af' exx pop de pop bc pop af pop hl ld sp,hl nop ld hl,0 jp 0 .word 0,0,0 ; endx = $ aloc = 15h bloc = 13h cloc = 12h dloc = 11h eloc = 10h floc = 14h hloc = 31h lloc = 30h ploc = 34h sloc = 17h tloc = 35h tlocx = 25h llocx = 20h aploc = 09h bploc = 0bh cploc = 0ah dploc = 0dh eploc = 0ch fploc = 8 hploc = 0fh lploc = 0eh xloc = 7 yloc = 5 rloc = 2 iloc = 3 ; actbl .byte 'A', aloc .byte 'B', bloc .byte 'C', cloc .byte 'D', dloc .byte 'E', eloc .byte 'F', floc .byte 'H', hloc .byte 'L', lloc .byte 'M', hloc | 0c0h .byte 'P', ploc | 080h .byte 'S', sloc | 080h .byte 'I', iloc ; prmtb .byte 'A',aploc .byte 'B',bploc .byte 'C',cploc .byte 'D',dploc .byte 'E',eploc .byte 'F',fploc .byte 'H',hploc .byte 'L',lploc .byte 'M',hploc | 0c0h .byte 'X',xloc | 80h .byte 'Y',yloc | 80h .byte 'R',rloc .byte 80h ; ; ;ANDEN DEL AF MONITOR-SOURCE ;V 1.0 COMET ;KONSTANTER TIL OP.SYS. ; rr0 = 0e0h rrq = 1 wrq = 2 grq = 4 rdf = 8 c3s = 10h c2s = 20h ; rr1 = 0e1h uas = 1 c1s = 2 rws = 4 scip = 8 swp = 10h mkf = 20h mk = 40h s3 = 80h ; rr2 = 0e2h rr3 = 0e3h nar = 1 nbr = 2 cor = 4 doe = 8 cre = 10h rec = 20h gpf = 40h wd = 80h gnt = 1 wr0 = 0e0h wmd = 2 wcr = 8 wme = 10h srs = 20h rset = 80h wr1 = 0e1h grd = 2 gre = 4 rrd = 8 rre = 10h rrr = 40h wrr = 80h wr2 = 0e2h wr3 = 0e3h rw = 8 rri = 10h c1 = 20h c2 = 80h c3 = 40h wr5 = 0e5h rmd = 8 rme = 10h wr6 = 0e6h ua = 1 ; ;OFFSET-VAERDIER ; erf = 0e0h err1 = 0e1h erro2 = 0e2h poerr = 0e3h rderr = 0e4h prerr = 0e5h rcerr = 0e6h iorun = 0e7h unit = 0e8h eot = 0e9h blokke = 0eah blknr = 0ebh ; nzflg = 7 ; strsg ld c,4 call expr pop bc inc c pop hl ld b,l dec b push bc pop iy pop hl pop de and a sbc hl,de push hl pop ix call crlf stlp3 call iochk push af ld c,1 call ioset push de ld hl,-64 call carret pop de ld c,cr call crtout ld h,d ld l,e call hlsp pop af ld c,a call ioset inc hl push ix pop bc stlp2 ld a,(de) cpir jp po,stfin1 push bc dec hl push hl push de push iy pop bc stlp1 inc de inc hl ld a,(de) cp (hl) jr z,sthp1 dec c jr z,stnmat sthp1 djnz stlp1 push bc ld c,cr call co pop hl ex (sp),hl call hlsp ld d,h ld e,l pop bc push iy pop hl ld a,l sub c inc h ld l,a call hlsp pop hl call ladr call crlf jr sthp2 stnmat pop de pop hl sthp2 inc hl pop bc jr stlp2 stfin1 inc de dec ix call abort push ix pop hl ld a,l or h jr nz,stlp3 ret ; inp8 call exlf call trans ld b,a ex de,hl call trans ld h,b ld l,a jr imp84 imp80 ld b,(hl) call overz call copck ret c jr z,imp81 cp '_' jr z,imp82 push hl call exf pop hl call trans pop hl ld (hl),a ld a,b cp cr ret z imp81 inc hl imp83 ld a,l and 7 jr nz,imp80 imp84 call moverz jr imp80 imp82 dec hl jr imp83 ; dmp8 ld c,4 call expr pop hl call trans ld e,a pop hl call trans ld d,a pop hl call trans ld b,a pop hl call trans ld h,a ld l,b impd80 call moverz impd81 ld b,(hl) call overz call abort call hilox ld a,l and 7 jr nz,impd81 jr impd80 ; trans ld a,h and 3 rrca rrca ld h,a ld a,l and 70h rrca or h ld h,a ld a,l and 7 or h ret ; moverz call lfadr call blk ld b,h call overz ld b,l call overz jp blk ; overz ld a,b and 0c0h call ovsk6 ld a,b and 38h call ovsk3 ld a,b and 7 call ovsk0 jp blk ; ovsk6 rrca rrca rrca ovsk3 rrca rrca rrca ovsk0 add a,30h ld c,a jp co ; ;SPOL TAPE TILBAGE ; back ld a,unit call rmem out (wr6),a in a,(rr1) and scip jp z,error ld a,rw out (wr3),a ld c,0 ld a,eot call wmem ld a,blknr jp wmem ; ; ;AKTIVER TAPE TIL SKRIVNING ; caswak call iochk and ~pmsk cp pcas jr z,fnskr cp pbuf jp z,inobuf ret fnskr call ti ld b,a call bufwak ld c,b call po0 ex af,af' ld c,a call po0 ex af,af' ret bufwak push de ld e,1 call tpck skr8 ld a,c1+c2 out (wr3),a ld a,blknr call rmem cp 2 ld a,50 jp skr1 ld a,200 skr1 call delay ld a,0aah out (wr2),a ld a,wme out (wr0),a pop de ret ; ; ;STANDS SKRIVNING ; wrfin call inte ld a,wrr out (wr1),a ld a,wcr out (wr0),a call inte ld a,wrr out (wr1),a call inte ld a,wrr out (wr1),a ld a,0aah out (wr2),a xor a out (wr0),a call inte ld a,wrr out (wr1),a ld a,wmd out (wr0),a ld a,8 call delay call eotck ld a,c1 out (wr3),a ld a,40 call delay call eotck in a,(rr3) and cor ld c,a ld a,erro2 call mskr skr6 xor a out (wr3),a jp gap2 ; ; ;AKTIVER TAPE TIL LAESNING ; casrak call iochk and ~rmsk cp rcas jr z,filnvn cp rbuf jp z,inibuf ret filnvn call bufrak in a,(rr2) ld c,a call co call ricas ld c,a ex af,af' cp c ret z ld c,'?' call co ld bc,error push bc jp rdbrk bufrak push de ld e,0 call tpck les1 ld a,gre + rre out (wr1),a ld a,c2 out (wr3),a ld a,24 call delay xor a out (wr3),a ld a,c2 out (wr3),a ld a,rme out (wr5),a pop de call ricas sub 0aah ld c,a ld a,prerr call mskr lesok call inte call rdint1 jp nz,abend in a,(rr3) and rec xor rec ld c,a ld a,rcerr mskr call wmem ret z erfskr ld a,erf jp wmem ; tpck ld c,true call inte21 call ready jr nz,tpnot ld a,eot call rmem or a ret z tpnot call inte2 inc c jp abnd2 ; ;STANDS LAESNING FRA TAPE ; rdfin call inte call rdint1 jr z,rdfin rdfin1 ld a,grd out (wr1),a ld a,rmd out (wr5),a call eotck xor a out (wr3),a ld a,24 call delay call eotck in a,(rr3) and cre + doe + cor + nbr + nar ld c,a ld a,erro2 call wmem ld a,c and cre + doe + cor jr z,gap1 ld c,a call erfskr gap1 in a,(rr2) sub 0aah ld c,a ld a,poerr call mskr gap2 ld a,-1 call spol11 inte2 ld c,false inte21 ld a,iorun jp wmem ; ; eotck in a,(rr1) and mkf ret z ld c,a speot ld a,eot jr abnd1 ; ; ready push de call clear ld a,rset out (wr0),a ld a,unit call rmem out (wr6),a in a,(rr1) and rws jr nz,abnd3 pop de ld a,e or a in a,(rr1) jr nz,ready1 and scip xor scip jr ready2 ready1 and scip + swp xor scip + swp ready2 ld c,a ld a,err1 jp mskr ; ; clear ex de,hl ld hl,0 add hl,sp ex de,hl ld e,erf ld c,nzflg xor a clear1 ld (de),a inc de dec c jr nz,clear1 ret ; ; inte push af push hl ld hl,0 inte1 call eotck in a,(rr0) and rrq + wrq + grq jr nz,hpi dec hl ld a,l or h jr nz,inte1 jr abnd3 hpi pop hl pop af ret ; rdint1 in a,(rr0) and grq ret nz ld a,rrr out (wr1),a ret ; abend ld c,1 ld a,rderr abnd1 call wmem abnd2 call erfskr abnd3 jp error ; ; seks call ti ld d,a call crlf seksks call bufrak in a,(rr2) ld c,a call co cp d jr z,sekfu call rdfin call abort jr seksks sekfu call ricas sub 50h ld c,a call co rdbrk xor a call delay call rdfin1 ld a,blknr call rmem dec a ld b,a jr spol ; ; ;SPOLEFUNKTION, FIND BLOK ; ; baand call expr1 pop hl ld b,l ; ; ;SELVE SPOLERUTINEN ; spol ld a,blknr call rmem sub b ld c,a ld a,blokke call wmem ld e,0 call tpck ld a,blokke call rmem or a ret z ld a,c2 jp m,spol2 ld a,c3 spol2 out (wr3),a ld d,a ld a,rme out (wr5),a ld a,blokke call rmem or a jp p,spol0 neg spol0 ld b,a ld a,6 call delay spol5 xor a out (wr3),a ld a,d out (wr3),a ld a,srs out (wr0),a spol3 in a,(rr1) and mkf jr nz,spol9 in a,(rr3) and rec jr z,spol3 spol4 in a,(rr3) and gpf jr z,spol4 in a,(rr1) and mkf jr nz,spol9 dec b jr nz,spol5 ld a,d cp c3 ld a,30 call z,delay in a,(rr1) and mkf jr nz,spol9 xor a out (wr3),a ld a,24 call delay in a,(rr1) and mkf jr nz,spol9 ld a,blokke call rmem spol11 ld b,a ld a,blknr call rmem sub b ld c,a ld a,blknr call wmem jp inte2 spol9 xor a out (wr3),a ld a,24 call delay ld a,d cp c3 ld a,blokke call rmem jr z,spol10 add a,b call spol11 ld c,1 jp speot spol10 sub b jr spol11 ; ; delay push de delay1 ld e,30 delay2 ld d,22 delay3 dec d jr nz,delay3 dec e jr nz,delay2 dec a jr nz,delay1 pop de ret ; ; ;BUFFER-RUTINER ; obuf push hl ld hl,0 add hl,sp ld l,obpnt inc (hl) ld l,(hl) dec l dec h dec h dec h ld (hl),c inc l call z,obob pop hl ld a,c ret obob push bc call bufwak ld a,wrr ld bc,wr2 oblpx call inte out (wr1),a outi jr nz,oblpx call wrfin call blkskr pop bc ret ; ibuf push hl ld hl,0 add hl,sp ld l,ibpnt inc (hl) ld l,(hl) dec h dec h dec l inc l call z,ibuibi ld a,(hl) pop hl or a ret ibuibi push bc call bufrak ld bc,rr2 jr ibuin1 ibuinl call inte call rdint1 jp nz,abend ibuin1 ini jr nz,ibuinl call rdfin call blkskr pop bc dec h ret ; blkskr push hl push de ld hl,-64 call carret pop de call crlf ld a,blknr call rmem dec a call lbyte pop hl jp blk ; clrscr xor a call aaaa ld (hl),a ld hl,0ec00h ld de,0ec01h ld bc,3ffh ld (hl),' ' ldir ld hl,0 jp abc screen ld a,d or e ret z ld a,(hl) inc hl dec de exx cp 9 jr nz,aca push de call bbbb call eeee ex de,hl pop de ld a,l and 0f8h ld l,a ld de,8 add hl,de xor a jr ada aca cp 0dh jr nz,aea push de call bbbb call eeee ex de,hl pop de ld a,l and 3fh jr nz,afa push hl call aaaa ld a,(hl) pop hl or a jr z,aga afa ld a,l and 0c0h ld l,a ld de,40h add hl,de aga ld a,1 jr ada aea push de call bbbb call eeee ex de,hl pop de call abd xor a push de call bbbb call eeee ex de,hl pop de inc hl ada push hl call aaaa ld (hl),a pop hl ld a,h xor 4 or l jr nz,aha ld hl,0 call abe ld b,40h ld a,20h abf ld (hl),a inc hl djnz abf ld hl,40h call abe call abg ld hl,03c0h aha call abc exx jp screen abe push hl call cccc call eeee pop hl add hl,de ld a,h and 3 add a,0ech ld h,a ret abd ld b,a call abe ld (hl),b ret abg push de ex de,hl call cccc call dddd pop de ld a,0ch out (mcrtd0),a ld a,h out (mcrtd1),a ld a,0dh out (mcrtd0),a ld a,l out (mcrtd1),a ret carret push hl call bbbb call eeee pop hl add hl,de abc push de ex de,hl call bbbb call dddd pop de push hl call cccc call eeee pop hl add hl,de ld a,0eh out (mcrtd0),a ld a,h out (mcrtd1),a ld a,0fh out (mcrtd0),a ld a,l out (mcrtd1),a ret ; aaaa ld hl,0ff00h add hl,sp ld l,0fbh ret bbbb ld hl,0ff00h add hl,sp ld l,0feh ret cccc ld hl,0ff00h add hl,sp ld l,0fch ret dddd ld (hl),e inc hl ld (hl),d ex de,hl ret eeee ld e,(hl) inc hl ld d,(hl) ret ; ; .END