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.
 
 
 
 
 
 

107 lines
2.4 KiB

.z80
;
; Clock for supplementing normal MYZ80 bios
;
;
;==========================================================================
;
;
false equ 0
true equ not false
size equ 6275 ;size in 0.01 k (e.g. 60k = 6000,
; 59.5k = 5950, 48.25k = 4825)
ioval equ 80H ;IOBYTE value on cold boot (see documentation)
;
; Lower memory stuff
;
IOBYTE EQU 3 ;IOBYTE location
DSKUSR EQU 4 ;Disk/user location
ENTRY EQU 5
WARMB EQU 0
;
; QP/M locations
;
QPMBIOS EQU size/25*256
QDOS EQU QPMBIOS-(0EA00H-0DC06H)
QCP EQU QDOS-806H
;
; MYZ80 API locations used
;
CONST EQU 0FFE1H ;Console status
CONIN EQU 0FFE2H ;Console input
CRTOUT EQU 0FFE3H ;Send char to console
LIST EQU 0FFE4H ;List character
PUNCH EQU 0FFE5H ;Punch character (auxout)
READER EQU 0FFE6H ;Reader character (auxin)
HOME EQU 0FFE7H ;Home disk
SELDSK EQU 0FFE8H ;Select disk in C-reg.
SETTRK EQU 0FFE9H ;Seek track in C-reg.
SETSEC EQU 0FFEAH ;Seek sector
SETDMA EQU 0FFEBH ;Set disk i/o address
READ EQU 0FFECH ;Read sector
WRITE EQU 0FFEDH ;Write sector
PRSTAT EQU 0FFEEH ;List status
SECTRAN EQU 0FFEFH ;Sector xlation
CONOUTS EQU 0FFF0H ;Console output status
XBIOS EQU 0FFFDH ;Extended MYZ80 functions
;
; High (MONITOR) area data locations
;
; Printer locations in high memory
;
HISTACK EQU 0FF14H ;temp
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ASEG
ORG 100H
.phase 0fec0h
;
qpmclk::
LD A,42
LD HL,CLKBUF
PUSH HL
CALL XBIOS ; BCD hr/min/sec/century/yr/mon/day
; convert from BCD to normal -- and fix things up
POP HL
LD B,7
DEC HL
Q0: INC HL
XOR A
RRD ; rotate low nibble of A through nibbles of (HL)
LD D,A ; save low nibble
LD A,(HL) ; get high nibble
ADD A,A ; * 2
LD C,A ; save
ADD A,A ; * 4
ADD A,A ; * 8
ADD A,C ; * 10
ADD A,D ; + low digit
LD (HL),A ; set non-BCD version
DJNZ Q0
; now realign values from system call
LD C,A ; day
DEC HL
LD B,(HL) ; mon
DEC HL
LD E,(HL) ; yr
DEC HL
DEC HL ; skip century
PUSH BC
LD B,(HL) ; sec
DEC HL
LD C,(HL) ; min
DEC HL
LD D,(HL) ; hr
LD (CLKBUF+2),DE ; yrE/hrD
LD (CLKBUF+4),BC ; minC/secB
POP BC
LD (CLKBUF),BC ; dayC/monB
; did the adjustments -- return ptr to day/mon/yr/hr/min/sec
ret
CLKBUF: DB 0,0,0,0,0,0,0
.dephase
end