title 'MP/M II V2.0 Common/Banked XDOS I/F' name 'xdosif' dseg @@xdsif: public @@xdsif cseg ;xdosif: @xdsif: public @xdsif ;do; ;/* ; Copyright (C) 1979, 1980,1981 ; Digital Research ; P.O. Box 579 ; Pacific Grove, CA 93950 ; ; Revised: ; 14 Sept 81 by Thomas Rolander ;*/ extrn rlr extrn xdos extrn sysdat extrn ProcAddressTable extrn msegtbl extrn xiosms parsefilename: public parsefilename ;BC = .(.filename,.fcb) push b call getMX pop h mov e,m inx h mov d,m xchg di shld temp1 xchg inx h mov c,m inx h mov h,m mov l,c shld temp2 lxi h,commonbuffer+4+80 shld commonbuffer+2 lxi h,commonbuffer+4 shld commonbuffer lxi b,80 call move call enterbnkxdos lxi b,commonbuffer lxi h,0000 call bnkxdos mov a,h ora l jz savretcode inx h mov a,h ora l dcx h jz savretcode lxi d,commonbuffer+4 mov a,l sub e mov e,a mov a,h sbb d mov d,a lhld temp1 dad d savretcode: shld retcode call exitbnkxdos lhld temp2 lxi d,commonbuffer+4+80 lxi b,27 call move lhld retcode push h call rlsMX ;also ei's pop h ; ei ret ; ; Common/Banked XDOS Utilities ; move: ;BC = Count, DE = Source, HL = Destination ldax d mov m,a inx h inx d dcx b mov a,b ora c jnz move ret getmemseg: lhld rlr lxi d,0fh ;offset to memseg index dad d mov a,m ret extbnkswt: di mov m,a inr a jz extbnkswt1 dcr a add a add a extbnkswt1: lxi h,msegtbl add l mov c,a mvi a,0 adc h mov b,a jmp xiosms ; ret getMX: lxi d,MXProcuqcb mvi c,137 jmp xdos rlsMX: lxi d,MXProcuqcb mvi c,139 jmp xdos enterbnkxdos: pop d lxi h,0 dad sp lxi sp,topofstack push h push d ;enterbnkxdos return address call getmemseg sta usermemseg xra a call extbnkswt ei ret bnkxdos: ;HL = Proc # * 2 lxi d,ProcAddressTable dad d mov e,m inx h mov d,m xchg pchl ; ret exitbnkxdos: call getmemseg lda usermemseg call extbnkswt pop d pop h sphl push d ret ; ; Common/Banked XDOS Data Segment ; ; declare MXProc$cqcb structure ( ; cqueue, ; buf (2) byte ) public ; initial (0,'MXProc ',0,1); public MXProccqcb MXProccqcb: dw $-$ ; ql db 'MXProc ' ; name dw 0 ; msglen dw 1 ; nmbmsgs dw $-$ ; dqph dw $-$ ; nqph dw 0 ; msgin dw 0 ; msgout dw 1 ; msgcnt ds 2 ; buf (2) byte ; declare MXProc$uqcb userqcbhead public ; initial (.MXProc$cqcb); MXProcuqcb: dw MXProccqcb ; pointer ; declare common$buffer (128) byte initial (0); commonbuffer: ds 128 ; declare common$stack (20) address initial (0c7c7h); commonstack: dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h userstkptr: ds 2 ; declare top$of$stack address at (.common$stack(21)); topofstack: usermemseg: ds 1 retcode: ds 2 temp1: ds 2 temp2: ds 2 ;end xdosif; END