home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpmug
/
cpmug010.ark
/
LLLMON.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
4KB
|
210 lines
;SMALL MONITOR TO INTERFACE LLLBASIC AND LLLFP TO
;CP/M. A.R.G 10/9/77
; JIF 12/24/77
;
CPM EQU 5 ;CP/M ENTRY
EOF EQU 1AH ;^Z
IOJUMP EQU 1900H
FREEMEM EQU 2000H ;BEGINNING OF FREE MEMORY
INIT EQU 1920H ;ADDRESS OF JUMP TO INITIALIZATION ROUTINE
FWAM EQU 1923H ;ADDRESS OF WORD CONTAINING ADDRESS OF FIRST
; BYTE OF FREE MEMORY
M1 EQU 0103H ;NEW ENTRY PT FOR INTERP
M1A EQU 0116H ;NEW INTERP RESTART ENTRY PT
;
BOOT EQU 0000H ;REBOOT ENTRY POINT
CPM EQU 0005H ;CPM ENTRY POINT
TBUF EQU 0080H ;TRANSIENT PROGRAM BUFFER
TFCB EQU 005CH ;TRANSIENT PROGRAM FCB
OPEN EQU 15 ;OPEN FUNCTION CODE
READ EQU 20 ;READ FUNCTION CODE
; IOJUMP TABLE. STACK ADDRESS FILLED IN BY INITR
ORG IOJUMP
SPNT: DW 0
SUBAD: DW SUBS
JMP CIN
JMP COUT
JMP STAT
JMP RDR
;
; JUMP TO INITIALIZATION ROUTINE
ORG INIT
JMP INITR
;
; POINTER TO FIRST WORD FREE MEMORY
ORG FWAM
DW FREEMEM
;
; USER SUBROUTINE POINTERS. TERMINATED BY BYTE WITH VALUE 0FFH.
SUBS:
DB 1 ;SUBROUTINE #1
DW SUB1 ;START ADDR SUBROUTINE #1
DB 2 ;SUBROUTINE #2
DW SUB2 ;START ADDR SUBROUTINE #2
DB 0FFH ;END OF SUBROUTINE TABLE
;
;**********************************************************
; PUT SP ADDRESS TO SPACE BETWEEN VEND AND IOJUMP
INITR: LHLD 6 ;LOAD FBASE ADDR. CCP WILL BE OVERLAID
MOV A,H
SBI 20H ;GET CBASE ADDRESS
MOV H,A
SHLD SPNT
LXI D,TFCB ;OPEN PROGRAM FILE
CALL FOPEN
JC ERR
JMP M1 ;LLL INITIALIZE ENTRY POINT
;CAN USE M1A FOR RE-ENTRY TO
;OLD PROGRAM
;************************************************************
;CP/M ENTRY ROUTINES
;
;CIN RETURNS CHARACTER WITH HIGH BIT SET
;IN B REGISTER. LLLFP SAVES B&C
CIN: PUSH PSW
PUSH H
PUSH D
MVI C,1
CALL CPM
; CHECK FOR CONTROL-C AND RETURN TO CPM IF FOUND
ANI 7FH
CPI 03
JNZ RTN
JMP 0
RTN:
ORI 80H
POP D
POP H
MOV B,A
POP PSW
RET
;
;COUT ACCEPTS CHARACTER IN A
COUT: PUSH H
PUSH D
PUSH B
ANI 7FH
MOV E,A
MVI C,2
CALL CPM
POP B
POP D
POP H
RET
;
;STAT CHECKS LEAST SIGN. BIT OF A, SAME CONVENTION
;AS CP/M
STAT: PUSH H
PUSH D
PUSH B
MVI C,11
CALL CPM
POP B
POP D
POP H
RET
;
; DISK READ INTERFACE. CONTROL TRANSFERRED HERE BY
; "PTAPE" CONSOLE COMMAND.
RDR: PUSH H
PUSH D
PUSH B
CALL GETBT
ORI 80H
POP B
POP D
POP H
RET
ERR: LXI D,ERMSG
MVI C,09H ;WRITE MSG
CALL CPM
JMP BOOT
;********************************;
; F O P E N ;
; ROUTINE TO OPEN A DISK FILE ;
; ;
; INPUT: DE=A(FCB) ;
; OUTPUT: CARRY=ERROR ;
;********************************;
FOPEN: MVI C,OPEN ;OPEN CODE
CALL CPM ;ISSUE OPEN
CPI 0FFH ;ERROR?
JZ FOERR ;YES
XRA A ;CLEAR CARRY
RET
FOERR: STC
RET
;********************************;
; G E T B T ;
; ROUTINE TO READ A BYTE ;
; ;
; OUTPUTS: A=BYTE ;
; CARRY=ERROR ;
;********************************;
GETBT: LXI H,TBUF+128
XCHG ;BUFFER END ADDR. IN DE
LHLD INPTR ;CURRENT POINTER IN HL
CALL CPHL ;TEST FOR END OF BUFFER
JZ GETB2 ;YES, READ
GETB1: MOV A,M ;GET BYTE
CPI EOF ;DONE?
JZ M1A
INX H ;BUMP POINTER
SHLD INPTR ;SAVE POINTER
ORA A ;RESET CARRY
RET
GETB2: MVI C,READ ;READ CODE
LXI D,TFCB ;FCB ADDRESS
CALL CPM ;ISSUE READ
CPI 00 ;ERROR?
JNZ IERR ;YES
LXI H,TBUF ;RESET BUFFER POINTER
SHLD INPTR
JMP GETB1 ;CONTINUE
IERR: STC
RET
;********************************;
; MISCELLANEOUS SUBROUTINES ;
;********************************;
;********************************;
; C P H L ;
; ROUTINE TO COMPARE HL VS DE ;
;********************************;
CPHL: MOV A,H
CMP D
RNZ
MOV A,L
CMP E
RET
;********************************;
; D A T A ;
;********************************;
ERMSG: DB 'ERROR',0DH,0AH,'$'
DS 32
INPTR: DW TBUF+128;INPUT POINTER
DECWRK: DB '000'
;
SUB1: ;RETURN TO CPM. TO CALL FROM BASIC PROGRAM, SAY CALL (1).
JMP 0
SUB2:
ORG FREEMEM