|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 8320 (0x2080) Types: TextFile Names: »PRSX.ASM«
└─⟦942159b25⟧ Bits:30005260 CP/M v. 3.0 til CR7 └─ ⟦this⟧ »PRSX.ASM«
TITLE 'BDOS PEEKING PROGRAMME FOR CPM 3.0 (CPM PLUS)' ;DETTE ER EN KOPI AF PEEK PROGRAMMET FRA MICROSYSTEMS FEBRUARY 84. ; ;EQUATES: BDOS EQU 5 ;SYSTEM ENTRY POINT CONOTF EQU 2 ;CON OUTPUT AUXOTF EQU 4 ;AUX OUTPUT LSTOTF EQU 5 ;LST OUTPUT DIRIOF EQU 6 ;DIR CONSOLE I/O PRINTF EQU 9 ;PRINT CONSOLE BUFFER FUNCT OPENF EQU 15 ;OPEN FILE CLOSF EQU 16 ;CLOSE FILE SRCHF EQU 17 ;SEARCH FOR FIRST SRCHN EQU 18 ;SEARCH FOR NEXT ERASF EQU 19 ;ERASE FILE READF EQU 20 ;READ SEQ. WRITF EQU 21 ;WRITE SEQ. CREAT EQU 22 ;CREATE FILE RENMF EQU 23 ;RENAME FILE SDMAF EQU 26 ;SET TRANSFER ASDRESS RDRAN EQU 33 WRRAN EQU 34 ;WRITE RANDOM RSXF EQU 60 ;WRITE SEQ. ; CR EQU 13 ;ASCII "CR" LF EQU 10 ;ASCII 'LF' ; ; ; ;RSX PREFIX ; DB 0,0,0,0,0,0 ;CPM SERIAL NO. JMP BEGIN NEXT: DB JMP DW 0 DW 0 ;PREVIOUS RSX RMVFLG: DB 0 ;REMOVES RSX WHEN NOT '0' DB 0 MYNAME: DB 'PEEKBDOS' DB 0 DB 0,0 ;RESERVED ; INTERCEPT SYSTEM CALLS HERE: BEGIN: MOV A,C CPI RSXF ;FOR RSX'S ONLY JZ RSXFNC jmp next ; continue *********************************** LXI H,FNCTBL ;NOPE , TEST FOR ONE OF OURS SCAN: MOV A,M ;GET INX H ORA A JZ NEXT CMP C JZ TRAP MVI A,6 CALL ADDHA JMP SCAN ; ; HERE WE'VE DETERMINED THAT WE MUST DISPLAY A SYSTEMCALL. ; TRAP: SHLD TBLPTR LXI H,0 DAD SP SHLD SPSAVE LXI SP,STACK ; ; BEGIN THE TRACE ; 1 DO NEWLINE MVI A,CR CALL TYPE MVI A,LF CALL TYPE LHLD TBLPTR CALL PRATHL CALL ILPRNT DB ': ' DB '('+80H MOV A,D CALL HEXOUT MOV A,E CALL HEXOUT CALL ILPRNT DB ')',' '+80H MOV A,C CPI SDMAF JZ EXIT ; ;NOT SETDMA ; PUSH D LDAX D INX D CALL HEXSP ; ;PRINT THE FILENAME ; MVI B,11 FNPRNT: LDAX D INX D CALL TYPE DCR B JNZ FNPRNT MVI A,' ' CALL TYPE ; ; PRINT EX S1,S2,RC ; MVI B,4 LXI H,IDBASE IDLOOP: CALL PRATHL LDAX D INX D CALL HEXSP DCR B JNZ IDLOOP ; ;PRINT THE NR FIELD ; CALL PRATHL LXI H,16 DAD D MOV A,M CALL HEXOUT POP D ; ;HEREAFTER THE FCB INFO FRINTED. ;ALLOW USER CALL TO PASS , AND THEN PRINT BDOS RETURN PARAMS. ; EXIT: CALL NEXT SHLD HLSAVE PUSH D PUSH B PUSH PSW LXI H,RTNMSG CALL PRATHL POP PSW PUSH PSW CALL HEXOUT LDA PAUSE ORA A JZ NOPAUS CALL ILPRNT DB ' ','*'+80H MVI C,DIRIOF MVI E,0FDH CALL NEXT ANI 5FH CPI 'Q' JNZ NOPAUS XRA A STA PAUSE NOPAUS: POP PSW POP B POP D LHLD SPSAVE SPHL LHLD HLSAVE RET ;BACK TO CALLER ; ;RSX FUNCTION ; RSXFNC: MVI A,00 ;************************* RET ;****************** PUSH D XCHG INX H MOV A,M CPI 2 JNZ PASS INX H MOV E,M INX H MOV D,M INX H SHLD SPSAVE LXI H,MYNAME MVI B,8 CKNAME: LDAX D INX D CMP M INX H JNZ PASS DCR B JNZ CKNAME ;RSX REGUEST FOR US POP D ;AM I A CLONE ? CALL NEXT CPI 0FFH JZ WEREAL LXI H,RMVFLG ;SAD: MVI M,0FFH RET ; WEREAL: LHLD SPSAVE MOV A,M INX H MOV H,M MOV L,A INX H MOV A,M CPI 0FFH JZ PNTREQ STA PAUSE PNTREQ: DCX H MOV A,M ;FETCH REQUEST ; ; A NOW HAS THE FUNCTION REQUEST CHARACTER PASSED FROM THE TPA ; CPI 'Q' JZ QUIT CPI 'A' MVI C,AUXOTF JZ SETOUT CPI 'C' MVI C,CONOTF ;PREP CODE JZ SETOUT MVI C,LSTOTF SETOUT: MOV A,C STA CURDEV XRA A RET ; ; HERE WHEN CALL 60 IS NOT FOR US ; PASS: POP D JMP NEXT ; ; HERE TO QUIT ; QUIT: MVI A,0FFH STA RMVFLG XRA A RET ; ; *************** ; * SUBROUTINES * ; *************** ; ; PRINT IN-LINE MESSAGE TERMINATED BY CHAR W/BIT7=1 ; ILPRNT: XTHL ;MSG POINTER TO HL CALL PRATHL ;PRINT IT XTHL RET ; ; PRINT STRING POINTED TO BY HL, UNTIL CHAR W/BIT7=1 ; PRATHL: MOV A,M INX H CALL TYPE ANI 80H JZ PRATHL RET ; ; OUTPUT A IN HEX, FOLLOWED BY SPACE ; HEXSP: CALL HEXOUT MVI A,' ' JMP TYPE ; ; OUTPUT A AS 2 HEX DIGITS ; HEXOUT: PUSH PSW RRC RRC RRC RRC CALL NYBBLE ;PRINT IT POP PSW NYBBLE: ANI 0FH ADI 90H DAA ACI 40H DAA ; ; TYPE CHAR IN A ON CONSOLE VIA CURRENT OUTPUT DEVICE. ; TYPE: PUSH PSW PUSH H PUSH D PUSH B ANI 7FH MOV E,A LDA CURDEV MOV C,A CALL NEXT POP B POP D POP H POP PSW RET ; ; ADD A TO HL ; ADDHA: ADD L MOV L,A RNC INR H RET ; ; TABLE OF LOCALLY-PROCESSED SYSTEM FUNCTION CALLS. FORMAT IS FUNCTION ; CODE FOLLOWED BY ID STRING. NOTE THAT MORE FUNCTIONS MAY BE ADDED TO ; THIS TABLE, BUT IF THEY ARE NOT FCB-RELATED FUNCTIONS, YOU'LL HAVE TO ; MODIFY THE TRAP ROUTINE TO PROCESS THE NEW DATA TYPES. ; FNCTBL: DB OPENF,'OPNFI','L'+80H DB CLOSF,'CLSFI','L'+80H DB READF,'RD SE','Q'+80H DB WRITF,'WR SE','Q'+80H DB SDMAF,'SETDM','A'+80H DB SRCHF,'SRCH ','L'+80H DB SRCHN,'SRCH ','N'+80H DB RENMF,'RENAM','E'+80H DB ERASF,'ERASE',' '+80H DB RDRAN,'RD RA','N'+80H DB WRRAN,'WR RA','N'+80H DB CREAT,'CREAT','E'+80H ; DB 0 ; ; TABLE OF FCB ID STRINGS ; IDBASE: DB 'EX','='+80H DB 'SL','='+80H DB 'S2','='+80H DB 'RC','='+80H DB 'NR','='+80H ; RTNMSG: DB ' RET:',' '+80H ; ; DATA AREA ; CURDEV: DB AUXOTF ;SYSTEM-CALL # FOR OUTPUT PAUSE: DB 0 TBLPTR: DW 0 HLSAVE: DW 0 SPSAVE: DW 0 DS 24 STACK: END «eof»