From: matsuno@ainec1.lab.toyodenki.co.jp (MATSUNO Yoshiaki)
Newsgroups: fj.sys.pc98
Subject: Re: How to time on pc98
Date: 24 Dec 92 05:36:36 GMT
	<matsuno.92Dec16205532@ainec1.lab.toyodenki.co.jp>
	<1992Dec21.113027.24325@csce.kyushu-u.ac.jp>
	<N201201.92Dec22234400@hws.ipc.hiroshima-u.ac.jp>
Distribution: fj
Organization: TOYO Denki Seizo K.K., Kanagawa, Japan
In-reply-to: n201201@ue.ipc.hiroshima-u.ac.jp's message of 23 Dec 92 17:44:00 JST


  $@$A$O$d$V$k!w$d$C$Q$j@N(J PC-9801E $@$N(J BIOS $@$rFI$s$@(J $@$G$9!#(J

In article <N201201.92Dec22234400@hws.ipc.hiroshima-u.ac.jp>,
   n201201@ue.ipc.hiroshima-u.ac.jp (n201201) writes:
> PC9801F$@$N(JBIOS$@$r@NFI$s$@5FCS!w9-EgBg$G$9!#(J

  (^_^) $@$?$V$s!$F1$8(J BIOS $@$G$9$M!#%U%m%C%T!<$NH"$NCf$+$i$=$N$H$-$N%G%#(J
$@%9%"%;%s%V%k%j%9%H!\%3%a%s%H$r8+$D$1$@$7$F$-$^$7$?!#(J1987$@G/$N(J2$@7n$K$J$C(J
$@$F$^$9$M!#%G%#%9%"%;%s%V%k%j%9%H$r8x3+$9$k$N$O$^$:$$$+$b$7$l$J$$$N$G!$(J
$@%3%a%s%H$NItJ,$@$1$r$3$N5-;v$N:G8e$KIU$1$F$*$-$^$9!#5?;w%3!<%I$N$h$&$J(J
$@$=$&$G$J$$$h$&$J!$$G$b!$8+$l$P$o$+$j$^$9$h$M!#:#$N5!<o!$$H8@$C$F$b<j85(J
$@$K$"$k$N$O(J PC-9801RA5 $@$J$N$G!$A4A3:G?7$G$O$"$j$^$;$s$,!$%m%8%C%/$OF1$8(J
$@$G$9!#(J

> $@B?J,>e$N?tCM$O!"(J8253$@$+$i#12s$N3d$j9~$_$,5/$3$C$?$H$-$N%/%m%C%/?t$+$H;W(J
> $@$&$N$G$9$,!"$I$&$G$7$g$&$+!#(JBIOS$@$O!"(J10ms$@$N4V$K?t==2s0J>e%?%$%^!<3d$j9~(J
> $@$_$r5/$3$7$F$$$?$h$&$K;W$$$^$9!#7W;;$D$$$G$K(J10ms$@$N3d$j9~$_$r5/$3$7$?$H(J
> $@$-$N2?%Q!<%;%s%H$N(JCPU$@%?%$%`$r>CHq$9$k$+65$($F$/$@$5$$!#(J

  $@$G!$%j%9%H$G$*$o$+$j$N$h$&$K3d9~$_$O(J 10ms $@$K#12s5/$3$j$^$9!#(JN \times
10ms $@$r;XDj$7$?$H$-$K$O!$(J10ms $@Kh$K(J N $@2s$N3d9~$_$,5/$-$^$9!#(J10ms $@$N4V$N(J 
BIOS $@$N>CHq$9$k;~4V$H$$$&$3$H$J$i!$86Ln$5$s$N?tCM$=$N$b$N$G$9!#%j%9%H(J
$@$r$6$C$H8+$k$H!$(J400$@%/%m%C%/$/$i$$$+$J$H$$$&$H$3$m$G$9!#(J

  $@3d9~$_%O%s%I%i$G$O!$$[$\I,MW==J,$J$3$H$7$+$d$C$F$$$^$;$s!#!v;d$K$O!v(J
$@=E$/$O8+$($^$;$s!#=E$$$+7Z$$$+$O8D?M$N<g4Q$J$N$G!$!V(J1$@&L(Js $@L$K~$GLa$i$J(J
$@$1$l$P=E$$!W$H;W$&?M$,$$$F$b$+$^$$$^$;$s$,!#(J

  MS-DOS $@4D6-2<$N(J 80386/486 $@$@$H2>A[%b!<%I$GAv$C$F$$$k$3$H$bB?$$$G$7$g(J
$@$&$+$i!$2>A[%b%K%?$b9MN8$7$J$1$l$P$J$j$^$;$s!#??$NCM$r;;=P$9$k$N$O$[$H(J
$@$s$IIT2DG=$G$7$g$&!#(J

  $@$J$s$K$;$h!$B,Dj$J$j?dDj$J$j$r$7$F$+$i!$=E$$7Z$$$r8@$C$?J}$,!$$*8_$$!$(J
$@OC$,$7$d$9$/$F$$$$$G$9$M!#(J
--
      $@!?!@(J      *---$@!{(J     $@>>Ln!!2EL@(J ( MATSUNO Yoshiaki )
      $@!@!?(J      |        $@ElMNEE5!@=B$(J($@3t(J)$@5;=Q8&5f=j#A#I8&5f<<(J
      $@!?!@(J      *-----------------------------------------------------$@"$(J

;*********************************************************************
;
;       PC-9801E timer BIOS and timer interrupt handler
;
;       file name       : 98timer.txt
;       date            : 1987 Feb.21-23
;       analysing       : Y.Matsuno
;
;*********************************************************************
;
;*********************************************************************
;
;       calender / timer BIOS
;
;       INT 1CH
;               AH              <- command BYTE
;               ES:BX / CX      <- command parameters
;       destroyed registers : none
;
;*********************************************************************
;
TIMER_BIOS:
        SI <- 0
        DS <- 0
        if (AH0 == 0)
            goto TIMER_BIOS_CAL_READ
        if (AH0 == 1)
            goto TIMER_BIOS_CAL_WRITE;
        if (AH0 == 2)
            goto TIMER_BIOS_TIMER_SET0;
        if (AH0 == 3)
            goto TIMER_BIOS_TIMER_START0;
        ; undefined commands exit
TIMER_BIOS_EXIT:
;
;---------------------------------------------------------------------
;
;       command #0
;       calender data read from uPD1990

        $@!&!&!&N,!&!&!&(J

;       ; command(AH) == 2
TIMER_BIOS_TIMER_SET0:
        JMP TIMER_BIOS_TIMER_SET
;
;---------------------------------------------------------------------
;
;       ; command(AH) == 3
TIMER_BIOS_TIMER_START0:
        JMP TIMER_BIOS_TIMER_START
;
;---------------------------------------------------------------------
;
;       command #1
;       calender data write to uPD1990

        $@!&!&!&N,!&!&!&(J

;---------------------------------------------------------------------
;
;       command #2, #3
;       data set up for interval timer interrupt
;               #2      TIMER_SET       initialize timer parameter and
;                                      reset PIC mask to start
;               #3      TIMER_START     reset PIC mask to start
;
;       input : (for #2)
;               ES:BX   address of subroutine to be executed when
;                      CA_TIM_CNT (0:58A) reaches at 0
;               CX      timer constant (unit = 10ms), to be written
;                      to CA_TIM_CNT
;       destroyed registers :
;               AL
;       note :
;       1. ES:BX is written at INT 7H vector location.
;       2. "count zero" routine will be executed by INT 7H.
;       3. Command #3 is reentrant.
;
;---------------------------------------------------------------------
;
TIMER_BIOS_TIMER_START:
        to L1939
;
TIMER_BIOS_TIMER_SET:
        CA_TIM_CNT <- CX
        INT 7H, ES:BX
        AL <- CNT0 | RLLH | MODE3 | BIN
        mode set of PIT
;
L1939:
        if (8MHz) {
             PIT.0 <- 6000H (== 24576)
        }
        else {
             PIT.0 <- 4E00H (== 19968)
        }
        AL <- IMR of master PIC
        reset interval timer's mask
        IMR <- new mask
        to TIMER_BIOS_EXIT
;
;---------------------------------------------------------------------
;
;       interval timer interrupt handler
;
;---------------------------------------------------------------------
;
TIMER_HANDLER:
        enable interrupt (?)
        DS <- 0
        if (--CA_TIM_CNT != 0) {
            OCW2 <- nonspecific EOI
            write OCW2 to master PIC
            AH <- TIMER_START
            call TIMER_BIOS
        }
        else {
            AL <- IMR of master PIC
            set mask of 8253
            write new IMR
            OCW2 <- nonspecific EOI
            write OCW2 to master PIC
            execute "count zero" subroutine
        }
;
;--------------- end of 98timer.txt ----------------------------------
Newsgroups: fj.sys.pc98