You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

220 lines
3.5 KiB

;==================================================================================================
; GENERIC HBIOS DATE AND TIME
;==================================================================================================
;
; HBIOS FORMAT = YYMMDDHHMMSS
;
.ORG 100H
;
;
LD B,$20 ; READ CLOCK DATA INTO BUFFER
LD HL,HBC_BUF ; DISPLAY TIME AND DATE FROM BUFFER
RST 08
;
#IF (0)
LD A,6
LD DE,HBC_BUF ; DISLAY DATA READ
; CALL PRTHEXBUF
CALL NEWLINE
#ENDIF
;
CALL HBC_DISP
RET
HBC_BUF .FILL 6,0
;
;-----------------------------------------------------------------------------
; DISPLAY CLOCK INFORMATION FROM DATA STORED IN BUFFER
;
HBC_DISP:
LD HL,HBC_CLKTBL
HBC_CLP:LD C,(HL)
INC HL
LD D,(HL)
CALL HBC_BCD
INC HL
LD A,(HL)
OR A
RET Z
CALL COUT
INC HL
JR HBC_CLP
RET
;
HBC_CLKTBL:
.DB 02H, 00111111B, '/'
.DB 01H, 00011111B, '/'
.DB 00H, 11111111B, ' '
.DB 03H, 00011111B, ':'
.DB 04H, 01111111B, ':'
.DB 05H, 01111111B, 00H
;
HBC_BCD:PUSH HL
LD HL,HBC_BUF ; READ VALUE FROM
LD B,0 ; BUFFER, INDEXED BY A
ADD HL,BC
LD A,(HL)
AND D ; MASK OFF UNNEEDED
SRL A
SRL A
SRL A
SRL A
ADD A,30H
CALL COUT
LD A,(HL)
AND 00001111B
ADD A,30H
CALL COUT
POP HL
RET
;
;-----------------------------------------------------------------------------
; DISPLAY ERROR
HBC_ERR:
PUSH HL
LD HL,HBC_FAIL
JR HBC_PRTERR
;
HBC_PRTERR:
CALL PRTSTR
CALL NEWLINE
POP HL
RET
;
HBC_FAIL .DB "ERROR$"
;
;-----------------------------------------------------------------------------
; GENERIC CP/M ROUTINES
;
BDOS .EQU 5 ;ENTRY BDOS
BS .EQU 8 ;BACKSPACE
TAB .EQU 9 ;TABULATOR
LF .EQU 0AH ;LINE-FEED
CR .EQU 0DH ;CARRIAGE-RETURN
;
; OUTPUT TEXT AT HL
;
PRTSTR: LD A,(HL)
OR A
RET Z
CALL PRINP
INC HL
JR PRTSTR
;
;Output WORD
;***********
;
;PARAMETER: Entry WORD IN HL
;*********
;
OUTW: LD A,H
CALL OUTB
LD A,L
CALL OUTB
RET
;
;Output BYTE
;***********
;
;PARAMETER: Entry BYTE IN A
;*********
;
OUTB: PUSH AF
RRCA
RRCA
RRCA
RRCA
AND 0FH
CALL HBTHE ;Change Half-BYTE
POP AF
AND 0FH
CALL HBTHE
RET
;
;Output HALF-BYTE
;****************
;
;PARAMETER: Entry Half-BYTE IN A (BIT 0 - 3)
;*********
;
HBTHE: CP 0AH
JR C,HBTHE1
ADD A,7 ;Character to Letter
HBTHE1: ADD A,30H
LD E,A
CALL PCHAR
RET
;
;
;Output on Screen
;****************
;
PRBS: LD E,BS
CALL PCHAR
RET
;
;Output CR+LF on Screen
;**********************
;
NEWLINE:
CRLF: LD E,CR
CALL PCHAR
LD E,LF
CALL PCHAR
RET
;
;Output ASCII-Character
;**********************
;
COUT:
PRINP: PUSH AF
PUSH DE
LD E,A
CALL PCHAR
POP DE
POP AF
RET
;
;CALL BDOS with Register Save
;****************************
;
INCHA: LD C,1 ;INPUT CHARACTER TO A
JR BDO
PCHAR: LD C,2 ;PRINT CHARACTER IN E
JR BDO
PSTRIN: LD C,9 ;PRINT STRING
JR BDO
INBUFF: LD C,10 ;READ CONSOLE-BUFFER
JR BDO
CSTS: LD C,11 ;CONSOLE-STATUS
JR BDO
OPEN: LD C,15 ;OPEN FILE
JR BDO
CLOSE: LD C,16 ;CLOSE FILE
JR BDO
DELETE: LD C,19 ;DELETE FILE
JR BDO
READS: LD C,20 ;READ SEEK
JR BDO
WRITES: LD C,21 ;WRITE SEEK
JR BDO
MAKE: LD C,22 ;MAKE FILE
JR BDO
SETDMA: LD C,26 ;SET DMA-ADDRESS
BDO: PUSH HL
PUSH DE
PUSH BC
PUSH IX
PUSH IY
CALL BDOS
POP IY
POP IX
POP BC
POP DE
POP HL
RET
;
.END