|
|
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: 5376 (0x1500)
Types: TextFile
Names: »MO6OH.MAC«
└─⟦122ca995a⟧ Bits:30005902 Move-IT arbejdsdiskette
└─⟦this⟧ »MO6OH.MAC«
.Z80
;
DPORT EQU 0
SPORT EQU 1
ASEG
;
; CUSTOM MOV-BIOS SKELETON FOR MOVE-IT (12/1/81)
;
;
; WRITTEN BY: JEFF WOOLF
; WOOLF SOFTWARE SYSTEMS
; 23842 ARCHWOOD ST.
; CANOGA PARK, CA 91307
ORG 100H
BIOS EQU $ ;THIS IS THE USER'S BIOS!!!
START: JP 0302H ;THE WAY TO THE PROGRAM
JP 4000H ;END OF USER SECTION
JP INITI ;COMLINE INIT.
JP FINISH ;COMLINE DE-INIT.
JP INSTA ;COMLINE STATUS
JP INDAT ;COMLINE DATA INPUT
JP OUTSTA ;COMLINE OUTPUT STATUS
JP OUTDAT ;COMLINE OUTPUT DATA
JP CNFGMS ;POINT TO THE CONFIGURATION MESSAGE
JP DIAL ;AUTO-DIAL/ANSWER SUPPORT
; THE CONFIG MESSAGE IS 80 CHARACTERS LONG, PLUS A CR AND TWO LFS
CNFGMS:
DB ' '
DB '2 METER INTERFACE BY OZ1CJO & OZ8ET'
DB 0DH,0AH,0AH,'$'
INITI: ;INIT. COMLINE (NO ENTRY,EXIT PARMS)
; ----- ANY CODE THE SYSTEM NEEDS TO INITIALIZE THE COMLINE -----
; ----- SHOULD BE ADDED HERE -----
CALL RESRTS
CALL HANGUP
RET
FINISH: ;DE-INIT. COMLINE (NO ENTRY,EXIT PARMS)
; ----- ANY CODE THE SYSTEM NEEDS TO RUN -- INITIALIZE THE COMLINE -----
; ----- SHOULD BE ADDED HERE -----
CALL RESRTS
RET
INSTA: ;INPUT STATUS (A=FF IF CHAR READY,0 IF NOT)
; ADD A ROUTINE TO READ THE STATUS OF THE INPUT PORT HERE
; USE ANY REGISTERS YOU LIKE, AND UPON EXIT, SET THE A REG
; TO 0FFH IF A CHARACTER IS WAITING, OR TO 0 IF NOT
LD HL,(DIRFLG) ; GET DIRFLG
LD A,H ; TEST FOR ZERO
OR L
JR Z,ISTA ; CHECK STATUS IF SO
DEC HL ; DECREMENT DIRFLG
IN A,(DPORT) ;
LD (DIRFLG),HL ; RESTORE DIRFLG
LD A,H ; TEST FOR ZERO NOW!
OR L
JR NZ,INRDY ; FLAG 'NOT READY' IF NOT
CALL RESRTS ; RESET RTS
LD A,(RXL) ; LENGTH OF CHECKSTRING
LD (FLAG),A ; STORE IN REMAINING LENGTH
ISTA: LD A,(FLAG) ; GET REMAINING LENGTH
OR A ; ZERO?
JR Z,ISTA1 ; YES - GO NORMAL
LD C,A ; ELSE MAKE 16 BIT
LD B,0
LD HL,RXMSG ; ADDR OF MSG.
XOR A ; RESET C-FLAG
SBC HL,BC ; SUBTRACT
LD A,(RXL)
LD C,A ; GET LENGTH
LD B,0 ; MAKE 16 BIT
ADD HL,BC ; CALCULATE LOCATION OF MSG
CALL ISTA1 ; CHECK STATUS
OR A ; STATUS RDY?
RET Z ; RETURN IF NO
IN A,(DPORT) ; GET INPUT
CP (HL) ; SAME AS EXPECTED?
JR Z,LAB1 ; YES - DECREMENT
LD A,(RXL) ; ELSE GET OLD LENGTH
LD (FLAG),A ; PUT IN FLAG
JR INRDY ; RETURN NOT RDY
LAB1: LD A,(FLAG) ; GET REST LENGTH
DEC A ; DECREMENT
LD (FLAG),A ; RESTORE
JR INRDY ; RETURN NOT RDY
ISTA1: IN A,(SPORT)
BIT 0,A
JR Z,INRDY
LD A,0FFH
RET
INRDY: XOR A
RET
;
;
FLAG: DB MSGEXT-RXMSG
RXL: DB MSGEXT-RXMSG
RXMSG: DB 0DH,0AH
MSGEXT: DB '6OH'
CALEND:
INDAT:
; RETURN THE CARACTER IN THE A REGISTER (DO NOT CHANGE THE
; CHARACTER IN ANY WAY!
IN A,(DPORT)
RET
OUTSTA: ;OUTPUT STATUS (A=FF IF RDY FOR CHAR, 0 IF NOT)
; ADD A ROUTINE TO READ THE STATUS OF THE OUTPUT PORT HERE.
; USE ANY REGISTERS YOU LIKE, AND, UPON EXIT, SET THE A REG
; TO 0FFH IF THE DATA PORT IS READY TO SEND DATA, OR TO 0 IF
; NOT.
LD HL,(DIRFLG) ; GET DIRFLG
LD A,H ; TEST FOR ZERO
OR L
JR NZ,OSTA ; IF NOT - CHECK STATUS
CALL SETRTS ; SETRTS
LD B,06H ; SET DELAY-VALUE
CALL DELAY ; DELAY
LD A,(TXL)
LD B,A
LD HL,TXMSG
CALL TXHDR
OSTA: LD HL,1000H ; SET DIRFLG-VALUE
LD (DIRFLG),HL ; RESTORE DIRFLG
IN A,(SPORT)
BIT 2,A
JR Z,ONRDY
LD A,0FFH
RET
ONRDY: XOR A
RET
TXHDR: PUSH HL
TXH1: CALL OSTA
OR A
JR Z,TXH1
POP HL
LD A,(HL)
OUT (DPORT),A
INC HL
DJNZ TXHDR
RET
TXL: DB TXMEXT-TXMSG
TXMSG: DB 0DH,0DH,0DH,0DH,0DH,0DH,'DE OZ6OH',0DH,0AH
TXMEXT: DS 10H,00H
OUTDAT: ;OUTPUT DATA (CHAR IN A ON ENTRY)
; ADD A ROUTINE TO OUTPUT THE CHARACTER IN THE A REGISTER TO
; THE DATA PORT.
OUT (DPORT),A
RET
DIRFLG: DW 0
DIAL: ;AUTO DIAL/ANSWER SUPPORT
;
; UPON ENTRY, B=0 FOR DIALING, 1 FOR HANGING UP,
; OR 2 FOR ANSWERING
;
; IF B=0 (DIALING), HL POINTS TO THE DIALING STRING,
; TERMINATED BY A COMMA, CR, OR CONTROL-Z
;
LD A,2
CP B
JR Z,ANSW
DEC A
CP B
JR Z,HANGUP
DIALIN: PUSH HL
PUSH HL
DIALI0: LD B,10H
LD A,(HL)
CP '0'
JR Z,DIL0
JR C,DIALI1
CP ':'
JP C,NLET
RES 5,(HL)
NLET: INC HL
DJNZ DIALI0
DIL0: LD A,TXMEXT-TXMSG
LD (TXL),A
POP HL
POP HL
RET
DIALI1: POP BC
XOR A
SBC HL,BC
LD B,H
LD C,L
LD A,TXMEXT-TXMSG
ADD A,C
LD (TXL),A
POP HL
LD DE,TXMEXT
LDIR
CALL ANSW
RET
HANGUP: LD A,TXMEXT-TXMSG
LD (TXL),A
LD DE,SRMSG
CALL PUTDE
LD A,CALEND-RXMSG
LD (RXL),A
LD (FLAG),A
RET
ANSW: LD DE,GRMSG
CALL PUTDE
LD A,MSGEXT-RXMSG
LD (RXL),A
LD (FLAG),A
RET
SETRTS: LD A,15H
OUT (SPORT),A
LD A,0EAH
OUT (SPORT),A
RET
RESRTS: ; RELEASE RTS, AND RETURN.
LD A,11H
OUT (SPORT),A
IN A,(SPORT)
BIT 0,A
JR Z,RESRTS
LD A,15H
OUT (SPORT),A
LD A,0E8H
OUT (SPORT),A
RET
;
putde: ld c,9
call 5
ld de,crlf
ld c,9
jp 5
;
DELAY: PUSH BC
LD B,0
DEL1: PUSH BC
LD B,40H
DEL0: PUSH BC
POP BC
DJNZ DEL0
POP BC
DJNZ DEL1
POP BC
DJNZ DELAY
RET
;
srmsg: db 'Recieve selective.$'
grmsg: db 'Recieve general.$'
crlf: db 13,10,'$'
DS 300H-$
;
END
«eof»