{ Bios Parameter Block for CP/M3 } TYPE BiosPBType = RECORD fn: byte; areg: byte; bcreg: integer; dereg: integer; hlreg: integer END; VAR biospb: BiospbType; { Call BIOS and return HL-Reg } FUNCTION mybioshl(nr, bc, de: integer): integer; VAR bsnr, bsbc, bsde, bsaf, bshl: integer; BEGIN IF cpm3 THEN WITH biospb DO BEGIN fn := nr+1; areg := 0; bcreg := bc; dereg := de; bdos(50, addr(biospb)); mybioshl := hlreg; END ELSE BEGIN bsnr := nr; bsbc := bc; bsde := de; {### BEGINNING OF INCLUDED FILE: MYBIOS .INL } INLINE ( (* ; bios routinen aufrufen von turbopascal *) (* ; quelltext fuer inlass asSembler *) (* ; die funktionen bios und bioshl erlauben e*) (* ; nicht, einen parameter in de an das bios *) (* ; wie es zb beim selektieren eines laufwerk*) (* ; ist. *) (* ; im hauptprogramm sollte folgender rumpf s*) (* ; procedure mybioshl(nr,bc,de:integer):inte*) (* ; var bsnr,bsbc,bsde,bshl:integer; *) (* ; begin *) (* ; bsnr:=nr;bsbc:=bc;bsde:=de; *) (* ; {$imybios.inl} *) (* ; mybioshl:=bshl *) (* ; end; *) (*BSNR EXT *) (*BSBC EXT *) (*BSDE EXT *) (*BSHL EXT *) (*BSAF EXT *) $CD/*+$0004 (*MYBIOS CALL MYBIOS2 *) /$18/$14 (* JR INLEND *) /$2A/$01/$00 (*MYBIOS2 LD HL,(1) *) /$ED/$5B/BSNR (* LD DE,(BSNR) *) /$1B (* DEC DE *) /$19 (* ADD HL,DE *) /$19 (* ADD HL,DE *) /$19 (* ADD HL,DE *) /$ED/$4B/BSBC (* LD BC,(BSBC) *) /$ED/$5B/BSDE (* LD DE,(BSDE) *) /$E9 (* JP (HL) *) /$22/BSHL (*INLEND LD (BSHL),HL *) /$F5 (* PUSH AF *) /$E1 (* POP HL *) /$22/BSAF (* LD (BSAF),HL *) (* END *) ) {### END OF INCLUDED FILE: MYBIOS .INL } ; mybioshl := bshl; END; END; { Call BIOS and return A-Reg } FUNCTION mybios(nr, bc, de: integer): integer; BEGIN IF cpm3 THEN WITH biospb DO BEGIN fn := nr+1; areg := 0; bcreg := bc; dereg := de; mybios := bdos(50, addr(biospb)); END ELSE mybios := bios(nr, bc); END;