|
|
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: 4096 (0x1000)
Types: TextFile
Names: »PTPA.ASM«
└─⟦942159b25⟧ Bits:30005260 CP/M v. 3.0 til CR7
└─⟦this⟧ »PTPA.ASM«
TITLE 'PEEK.ASM tpa module for PEEK.RSX '
;DETTE ER EN KOPI AF PEEK PROGRAMMET FRA MICROSYSTEMS FEBRUARY 84.
;
;EQUATES:
BDOS EQU 5 ;SYSTEM ENTRY POINT
CONOTF EQU 2 ;CONSOLE OUT FUNCTION
PRINTF EQU 9 ;PRINT CONSOLE BUFFER FUNCT
RSXF EQU 60 ;CALL REX SYSTEM CALL
;
DFCB1 EQU 5CH ;DEFAULT FILE CONTROLE BLOCK 1
DFCB2 EQU 6CH ;DEFAULT FILE CONTROLE BLOCK 2
TPA EQU 100H ;TRANSIENT PROGRAM AREA
;
CR EQU 13 ;ASCII 'CR' CODE
LF EQU 10 ;ASCII 'LF' CODE
;
;
; BY THE TIME WE GET RUNNING THE CPM+ LOADER ALREADY HAS LOADED THE
; AND ACTIVATED THE RSP (RESIDENT SYSTEM PROSESS) OR IT MAY ALREADY
; HAVE BEEN IN MEMORY FROM A PREVIOUS LOAD). SO ALL WEE HAVE TO DO IS TO
; PARSE ANY ARGUMENTS FROM THE COMMAND LINE, AND PASS THEM TO THE RSX
; BY FUNCTION 60.
;
LXI D,SIGNON
MVI C,PRINTF
CALL BDOS
LXI H,DFCB1+1 ;GET POINTER TO COMANDLINE ARG.
MOV A,M ;GET OPT. '-' FOR UNX PEOPLE.
CPI '-' ;
JNZ NODASH ;
INX H ;
NODASH: PUSH H
MOV E,M
MVI C,CONOTF
CALL BDOS
POP H
CALL PARSE ;PARSE FIRST ARGUMENT
PUSH H
MOV E,M
MVI C,CONOTF
CALL BDOS
POP H
CALL PARSE ;PARSE POSSIBLE SECOND ARGUMENT
MOV A,M ;SHOUDENT BE A THIRD
CPI ' ' ;I. E. 3. POSITION SHOUD BEE BLANK
JNZ SYNERR ;IF BAD THEN JUMP
SENDIT: LXI D,RSXPB ;SEND IT TO RSP
MVI C,RSXF
CALL BDOS
CPI 0FFH ;IS RETURNED IF NO RSX IS ACTIVE
LXI D,RSXNACT
JZ WRRSX
LXI D,RSXACT
WRRSX: MVI C,PRINTF
CALL BDOS
JMP 0 ;ALL DONE, WARM BOOT
;
;PARSE AN ARGUMENT
;
PARSE: MOV A,M ;FETCH ARGUMENT
INX H ;ADV POINTER
CPI ' ' ;ALLOW NULLS
RZ
CPI 'P' ;PAUSE FLAG
JNZ NPARS ;JUMP IF NOT
MVI A,1 ;PAUSE FLAG
STA ARGS+1 ;WHERE IT GOES
RET
NPARS: CALL VALID ;VALIDATE
STA ARGS
RET
VALID: CPI 'Q' ;QUIT
RZ
CPI 'A' ;OUT TO AUX
RZ
CPI 'C' ;OUT TO CON
RZ
CPI 'L' ;OUT TO LST:
JNZ SYNERR ;WHAT THEN
RET
;
;SYNTAX ERROR
;
SYNERR: LXI D,SYNEMS
MVI C,PRINTF
CALL BDOS
MVI A,'Q'
STA ARGS
JMP SENDIT
RSXNACT:DB CR,LF,'NO RSX IS ACTIVE$'
RSXACT: DB CR,LF,'RSX IS ACTIVE$'
SIGNON: DB CR,LF,'WELCOME TO PEEK',CR,LF
DB 'PARAMETERS :','$'
;
SYNEMS: DB CR,LF,'Command line syntaks error, commands: '
DB CR,LF,' Q (Quit )'
DB CR,LF,' P (Pause)'
DB CR,LF,' A (Output to "AUX" device)'
DB CR,LF,' C (Output to "CON" device)'
DB CR,LF,' L (Output to "LST" device)'
DB CR,LF,'$'
;
;RSX PARAMETER BLOCK
;
RSXPB: DB 127 ;FUNCTION # (WE IGNORE )
DB 2 ;TWO PARAMETERS
DW MYNAME ;PARAM1 = RSX NAME (PTR HERE)
DW ARGS ;PARAM2 = CMDLINE ARGS;
;
;NAME OF RSX
;
MYNAME: DB 'PEEKBDOS' ;UNIKE NAME OF BDOS;
ARGS: DB 'L',0FFH ;OUTPUT-DEVICE,PAUSE-FALG.
END
«eof»