|
|
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 - metrics - 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»