DataMuseum.dk

Presents historical artifacts from the history of:

Christian Rovsing CR7, CR8 & CR16 CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Christian Rovsing CR7, CR8 & CR16 CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦ded51eb66⟧ TextFile

    Length: 8320 (0x2080)
    Types: TextFile
    Names: »PRSX.ASM«

Derivation

└─⟦942159b25⟧ Bits:30005260 CP/M v. 3.0 til CR7
    └─ ⟦this⟧ »PRSX.ASM« 

TextFile

        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»