changeset 53:fe88cea67ef0

clock interrupt get time
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 22 Jul 2018 17:55:06 +0900
parents 51b437557f42
children fc10b7ae23d0
files engine.c io.c os9/Makefile os9/level2/Makefile os9/level2/clock.asm os9/level2/sysgo.asm
diffstat 6 files changed, 47 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/engine.c	Sun Jul 22 15:52:39 2018 +0900
+++ b/engine.c	Sun Jul 22 17:55:06 2018 +0900
@@ -248,7 +248,6 @@
 #endif
         do_trace(tracefile); 
    }
-   if(escape){ SAVEREGS do_escape(); LOADREGS }
    if(irq) {
     if(irq==1&&!(iccreg&0x10)) { /* standard IRQ */
 			 PUSHWORD(ipcreg)
@@ -274,6 +273,7 @@
     irq=0;
    }
   }
+  if(escape){ SAVEREGS do_escape(); LOADREGS }
   iflag=0;
  flaginstr:  /* $10 and $11 instructions return here */
   ireg=mem(ipcreg++);
--- a/io.c	Sun Jul 22 15:52:39 2018 +0900
+++ b/io.c	Sun Jul 22 17:55:06 2018 +0900
@@ -312,7 +312,7 @@
       time_t tm = time(0);
       struct tm *t = localtime(&tm);
       mem[IOPAGE+0x31] = t->tm_year;
-      mem[IOPAGE+0x32] = t->tm_mon;
+      mem[IOPAGE+0x32] = t->tm_mon+1;
       mem[IOPAGE+0x33] = t->tm_mday;
       mem[IOPAGE+0x34] = t->tm_hour;
       mem[IOPAGE+0x35] = t->tm_min;
@@ -369,8 +369,12 @@
 
 void timehandler(int sig) {
         attention = 1;
+#ifdef USE_MMU
+        irq = 1;
+#else
         irq = 2;
-        mem[(IOPAGE&0xfe00)+0x30] |= 0x10  ;
+#endif
+        mem[IOPAGE+0x30] |= 0x10  ;
         // signal(SIGALRM, timehandler);
 }
 
@@ -401,9 +405,9 @@
         fcntl(0, F_SETFL, tflags | O_NDELAY); /* Make input from stdin non-blocking */
         signal(SIGALRM, timehandler);
         timercontrol.it_interval.tv_sec = 0;
-        timercontrol.it_interval.tv_usec = 20000;
+        timercontrol.it_interval.tv_usec = 200000;
         timercontrol.it_value.tv_sec = 0;
-        timercontrol.it_value.tv_usec = 20000;
+        timercontrol.it_value.tv_usec = 200000;
         if (timer)
             setitimer(ITIMER_REAL, &timercontrol, NULL);
 }
--- a/os9/Makefile	Sun Jul 22 15:52:39 2018 +0900
+++ b/os9/Makefile	Sun Jul 22 17:55:06 2018 +0900
@@ -15,11 +15,8 @@
 os9d.rom : makerom level1/init 
 	./makerom -o os9d.rom  level1/shell level1/sysgo level1/ioman level1/term level1/pty level1/pdisk level1/d0 level1/d1 level1/clock level1/scf level1/rbf level1/init level1/os9p2 level1/os9p1
    
-os9lv2.rom : makerom level2/init
-	./makerom -o os9lv2.rom -2  level2/Shell  level2/dir level2/d1 level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman  level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
-
 os9v.rom : makerom level2/init
-	./makerom -o os9v.rom -2  level2/Shell  level2/dir level2/d1 level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman  level2/v0 level2/vrbf level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
+	./makerom -o os9v.rom -2  level2/Shell  level2/dir level2/d1 level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman  level2/v0 level2/vrbf level2/scf level2/rbf level2/os9p2 level2/sysgo level2/clock level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
 
 level1/init : nitros9-code
 	cd level1 ; make
--- a/os9/level2/Makefile	Sun Jul 22 15:52:39 2018 +0900
+++ b/os9/level2/Makefile	Sun Jul 22 17:55:06 2018 +0900
@@ -41,7 +41,7 @@
 	$(A09) $@.asm -o $@ $(LST)
 
 clock :  
-	$(A09) ../level1/clock.asm -o clock $(LST)
+	$(A09) clock.asm -o clock $(LST)
 
 pty :
 	$(A09) ../level1/pty.asm -o pty $(LST)
--- a/os9/level2/clock.asm	Sun Jul 22 15:52:39 2018 +0900
+++ b/os9/level2/clock.asm	Sun Jul 22 17:55:06 2018 +0900
@@ -22,7 +22,7 @@
 atrv     set   ReEnt+rev
 rev      set   $01
 edition  set   $06
-TimerPort set  $f8b0
+TimerPort set  $ffb0
 
          mod   eom,name,tylg,atrv,ClkEnt,size
 
@@ -33,15 +33,21 @@
 
 SysTbl   fcb   F$Time
          fdb   FTime-*-2
+         fcb   F$STime
+         fdb   FSTime-*-2
          fcb   $80
 
 
-ClockIRQ clra
-         tfr   a,dp
+ClockIRQ ldx   #TimerPort
+         lda   ,x
+         bita  #$10
+         beq   L00AE
+         lda   #$8f
+         sta   >TimerPort
 L00AE    jsr   [>D.Poll]
          bcc   L00AE
-L00B4    jmp   [>D.AltIRQ]
-         rts
+L00B4    jsr   [>D.AltIRQ]
+         rti
 
 ClkEnt   equ   *
          pshs  cc
@@ -57,17 +63,19 @@
          puls  pc,cc
 
 * F$Time system call code
-FTime    ldx   R$X,u
-         ldy   #TimerPort
+FTime    ldx   #TimerPort
          ldb   #$04
-         stb   ,y
-         ldd   1,y
-         std   ,x
-         ldd   3,y
-         std   2,x
-         ldd   5,y
-         std   4,x
-         clrb
+         stb   ,x
+         leax  1,x        Address of system time packet
+RetTime  ldy   <D.Proc    Get pointer to current proc descriptor
+         ldb   P$Task,y   Process Task number
+         lda   <D.SysTsk  From System Task
+         ldu   R$X,u
+STime.Mv ldy   #6         Move 6 bytes
+FMove    os9   F$Move
+         rts
+
+FSTime   clrb
          rts
 
          emod
--- a/os9/level2/sysgo.asm	Sun Jul 22 15:52:39 2018 +0900
+++ b/os9/level2/sysgo.asm	Sun Jul 22 17:55:06 2018 +0900
@@ -114,6 +114,14 @@
 
 * Default time packet
 DefTime  
+         fcb     0
+         fcb     0
+         fcb     0
+         fcb     0
+         fcb     0
+         fcb     0
+         fcb     0
+         fcb     0
 * dtb
 
        IFEQ  atari+corsham
@@ -190,8 +198,8 @@
          os9   I$Write                 write out banner
 
 * Set default time
-*         leax  >DefTime,pcr
-*         os9   F$STime                 set time to default
+         leax  >DefTime,pcr
+         os9   F$STime                 set time to default
 
          IFEQ  ROM
 * Change EXEC and DATA dirs
@@ -203,9 +211,9 @@
          lda   #READ.
          os9   I$ChgDir                change data dir.
          bcs   L0125
-         leax  >HDDev,pcr
-         lda   #EXEC.
-         os9   I$ChgDir                change exec. dir to HD
+*         leax  >HDDev,pcr
+*         lda   #EXEC.
+*         os9   I$ChgDir                change exec. dir to HD
        ENDC
 
 L0125    equ   *