mirror of https://github.com/wwarthen/RomWBW.git
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
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
|
|
|