1 REM Ins{nd av Kristoffer Eriksson SYSOP <5357>    1986-09-30 02.18.42 (DUMP)
; Fil: INPUTDOG.ASM
; Av:  Kristoffer Eriksson, "SKE" <5357>, 1986.
;
;-Ver--/-Datum----/-Sign-/-Kommentar----------------------------------
; 1.00 / 86-09-29 / SKE  / INPUTDOG
;
; Programmet l{nkar in en liten rutin som }stadkommer reset av datorn om
; ingen inmatning g|rs i Consi inom en viss tid fr}n anropet till Consi.
;
; Det st}r helt klart att det h{r skulle kunna g|ras p} m}nga andra s{tt.
; T ex kunde man r{kna med {ven den tid som inte tillbringas i v{ntan p}
; inmatning, eftersom det nu inte har n}gon effekt BASIC-program som ligger
; och v{ntar p} inmatning med SYS(5). Man kunde ocks} avbryta p} n}got
; smidigare s{tt {n reset som inte st{nger filer efter sig, t ex genom att
; stoppa programmet och l{gga ut "tv}ngskommandon", eller CHAIN.


Reset:      =     0
Consi:      =     65424
ClockVec:   =     65494
Spt.Tic:    =     65525

DefTimeOut: =     5 * 60

PtrSav.Bt:  DEFW  0                   ; Lagring av Y.Botm f|r ev url{nkning.
PtrSav.Co:  DEFW  0

; Den nya Consi-rutinen l{nkar in en timeout-rutin i avbrottsrutinen f|r
; realtidsklockan. Anledningen till att inte ha den inl{nkad j{mt {r att
; inte sl|a ned |vrig programexekvering, och slippa ha en flagga som m}ste
; testas ideligen.

Consi.Ny:   PUSH  HL
            LD    HL,(ClockVec)
            LD    (ClockL{nk+1),HL
            PUSH  HL
            LD    HL,ClockInt
            LD    (ClockVec),HL
$$TimeOut:  LD    HL,DefTimeOut + 256 ; Ers{tts med aktuell timeout-tid.
            LD    (TimeCount),HL
$$Consi:    CALL  0                   ; Vidare till gammal Consi.
            POP   HL
            LD    (ClockVec),HL
            POP   HL
            RET

; Nedr{kningsrutin i klock-avbrottet. Pga det s{tt sj{lva nedr{kningen {r
; utformad r{knas H-byten ned ett tick f|r tidigt (n{r L g}r fr}n 1 till 0
; i st{llet f|r fr}n 0 till 255), och hela v{rdet visar 256 f|r lite n{r
; det j{mf|rs med noll. D{rf|r m}ste det adderas med 256 innan det st{lls in
; fr}n b|rjan.

ClockInt:   PUSH  AF
            LD    A,(Spt.Tic)
            AND   A
            JR    NZ,ClockCont
            PUSH  HL
            LD    HL,TimeCount
            DEC   (HL)
            JR    NZ,ClockCont2
            INC   HL
            DEC   (HL)
            JP    Z,Reset
ClockCont2: POP   HL
ClockCont:  POP   AF
ClockL{nk:  JP    0                   ; Ers{tts med gamla klockavbrottet.

TimeCount:  DEFW  DefTimeOut

;_ Initiering                               _
Conwrite:   =     11
ChkLU:      =     43
HLbuf1:     =     81
IO:         =     90
IO.Print:   =     4
Y.Botm:     =     65292               ; Botten av BASIC-minnet
Y.Comtop:   =     65328               ; Toppen av COMMON-variablerna

Init:       CALL  Chain.Clr
            CALL  Clinepar            ; C = L{ngd, A = F|rsta tecken, Carry
            CP    "0"
            JR    C,I.x1
            CP    "9" + 1
            JR    NC,I.x1
            CALL  ASC2I
            LD    (HardTimeOut),DE
I.x1:       CALL  Chain.Load          ; Chain-fil sist p} raden.

L{nkain:    LD    HL,(HardTimeOut)
            INC   H                   ; Kompensera f|r nedr{kningsmetoden.
            LD    ($$TimeOut+1),HL
            LD    HL,(Consi+1)
            LD    ($$Consi+1),HL
            LD    (PtrSav.Co),HL
            LD    HL,(Y.Botm)
            LD    (Ptrsav.Bt),HL

            LD    HL,Consi.Ny
            LD    (Consi+1),HL
            LD    HL,Init             ; Skydda programmet fr}n |verskrivning.
            LD    (Y.Botm),HL
            LD    (Y.Comtop),HL

            EXX
            PUSH  HL                  ; Skydda relokeringsv{rdena.
            PUSH  DE
            PUSH  BC
            XOR   A
            CALL  ChkLU               ; Hitta LU-blocket f|r fil nr 0.
            LD    HL,Itext
            LD    BC,Itextend-Itext
            LD    A,IO.Print
            CALL NC IO                ; Skriv ut texten p} fil nr 0.
            POP   BC
            POP   DE
            POP   HL
            EXX
            RET

Itext:      DEFM "INPUTDOG Ver 1.00 har laddats! Av Kristoffer Eriksson 1986."
            DEFB  10,13
Itextend:

            DEFB  255
            DEFM  "PARM:Maximal v{ntetid f|r inmatning innan reset g|rs:"
            DEFB  0,3,0,0,2          ; Heltal 2 byte.
HardTimeOut:DEFW  DefTimeOut

            INCLUDE CLINEPAR         ; Hitta kommandoraden.
            INCLUDE ENDINIT          ; Initiering av filnamn }t ENDREL.
            INCLUDE ASC2I            ; Omvandl text HL till tal i DE.
