mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-26 18:04:07 +00:00
83 lines
2.3 KiB
NASM
83 lines
2.3 KiB
NASM
; Figure 10-5
|
||
;
|
||
; Testbed for Real Time Clock driver in the BIOS.
|
||
;
|
||
; The complete source file consists of three components:
|
||
;
|
||
; 1. The testbed code shown here.
|
||
; 2. The Real Time Clock driver destined for the BIOS.
|
||
; 3. The debug package shown in Figure 10-2.
|
||
;
|
||
TRUE EQU 0FFFFH
|
||
FALSE EQU NOT TRUE
|
||
|
||
DEBUG EQU TRUE ;For conditional assembly of RST
|
||
; instructions in place of IN and
|
||
; OUT instructions in the drivers.
|
||
RST6 EQU 30H ;Use RST 6 for fake clock tick.
|
||
|
||
ORG 100H
|
||
START:
|
||
LXI SP,Test$Stack ;Use local stack
|
||
CALL DB$Init ;Initialize the debug package
|
||
MVI A,JMP ;Setup RST 6 with JMP opcode
|
||
STA RST6
|
||
LXI H,RTC$Interrupt ;Setup RST 6 JMP address
|
||
SHLD RST6 + 1
|
||
|
||
JMP Testbed$Loop ;<=== REMOVE THIS JMP WHEN READY TO
|
||
; TEST WATCHDOG ROUTINES
|
||
|
||
LXI B,50 ;50 ticks before timeout
|
||
LXI H,WD$Timeout ;Address to transfer to
|
||
CALL Set$Watchdog ;Set the watchdog timer
|
||
;
|
||
;
|
||
; Make repeated entry to RTC Interrupt routine
|
||
; to ensure that clock is correctly updated.
|
||
;
|
||
Testbed$Loop:
|
||
MVI A,0AAH ;Set registers to known pattern
|
||
LXI B,0BBCCH
|
||
LXI D,0DDEEH
|
||
LXI H,0FF11H
|
||
RST 6 ;Fake interrupt clock
|
||
|
||
CALL DB$MSGI ;Display in-line message
|
||
DB 'Clock =',0
|
||
|
||
LXI H,Time$In$ASCII ;Get address of clock in driver
|
||
CALL DB$MSG ;Display current clock value
|
||
; (Note : Time$In$ASCII already has
|
||
; a Line Feed character in it)
|
||
CALL DB$MSGI ;Display in-line message
|
||
DB 0DH,0 ;Carriage Return
|
||
|
||
JMP Testbed$Loop
|
||
;
|
||
; Control arrives here when the watchdog timer times
|
||
; out.
|
||
WD$Timeout:
|
||
CALL DB$MSGI
|
||
DB 0DH,0AH,'Watchdog timed out',0
|
||
RET ;Return to watchdog routine
|
||
;
|
||
DW 9999H,9999H,9999H,9999H,9999H,9999H,9999H,9999H
|
||
DW 9999H,9999H,9999H,9999H,9999H,9999H,9999H,9999H
|
||
DW 9999H,9999H,9999H,9999H,9999H,9999H,9999H,9999H
|
||
Test$Stack:
|
||
;
|
||
; Dummy routines for those shown in other figures
|
||
;
|
||
; BIOS routines (Figure 8-10)
|
||
;
|
||
RTC$Interrupt: ;Interrupt service routine for clock tick
|
||
Set$Watchdog: ;Set Watchdog timer
|
||
Time$In$ASCII: ;ASCII string of HH:MM:SS, LF, 0
|
||
;
|
||
; Debug routines (Figure 10-2)
|
||
;
|
||
DB$Init: ;Debug initialization
|
||
DB$MSGI: ;Display message in-line
|
||
DB$MSG: ;Display message
|
||
|