1 REM Ins{nd av Kristoffer Eriksson <5357>    1987-12-11 19.40.49 (KERMIT)
; Fil: GIO.ASM
; Av:  Kristoffer Eriksson, "SKE" <5357>, 1987.
;
;-Ver--/-Datum----/-Sign-/-Kommentar----------------------------------
; 1.00 / 87-07-17 / SKE  /
;
; Letar upp adressen till en icke-officiell rutin i Basic-prommen, som
; klarar alla IO-operationer {ven p} blockorienterade enheter typ diskfiler,
; och en CLOSE-rutin med samma egenskap.
;
; B|r anv{ndas s} h{r:
;
; Init:     CALL   GIOInit
;           LD     (GIO+1),HL
;           LD     (GIOClose+1),DE
;           JP C   Ok{ndBasicVersion  ; (Troligen on|dig s{kerhets}tg{rd)
;           ...
; ;*  Anropa den generella IO-rutinen.
; ;*  Operationsnr i A, och parametrar i HL, BC, DE, som f|r IO.
; ;*
; GIO:      JP     0                  ; R{tt adress h{r f}s av GIOInit.
;
;
; GIO ers{tter IO, och initieras av GIOInit.
; F|r andra operationer {n INPUT/PRINT/GET/PUT kan man lika g{rna anv{nda
; vanliga IO. F|r CLOSE anv{nds GIOClose. CLOSE i GIO {r inte b{ttre {n CLOSE
; i IO; de skriver inte ut sista blocket.


            EXTERN GIOInit

Evalu:      = 32
UseUTLU:    = 105


;*  Leta fram adressen till rutinerna i Basic-prommen. Om det inte verkar
;*  fungera returneras sann carry, annars falsk carry. Det b|r dock fungera
;*  p} alla ABC800X-versioner. Adressen till IO-rutinen hamnar i HL, och den
;*  till CLOSE hamnar i DE.
;*  Anv{nder register IX, HL, DE, A.
;*
GIOInit:    LD     IX,(UseUTLU+1)
            LD     A,205
            CP     (IX+2)             ; Kolla om det {r en CALL vi hittat.
            SCF
            RET NZ
            LD     L,(IX+3)           ; HL <- Rutin f|r CLOSE av UTTLLU.
            LD     H,(IX+4)
            LD     DE,6
            ADD    HL,DE
            EX     DE,HL              ; DE <- Ing}ng f|r CLOSE av fil IX.

            LD     IX,(Evalu+1)       ; IX <- Adressen till EVALU.
            LD     L,(IX+6)
            LD     H,(IX+7)           ; HL <- Adr till en instruktionstabell.
            INC    H
            PUSH   HL
            POP    IX
            LD     L,(IX-82)          ; Tillsammans med INC H, motsvarar
            LD     H,(IX-81)          ;   detta IX+174. HL <- INPUT LINE
            PUSH   HL
            POP    IX
            CP     (IX+24)            ; Kolla att detta {r en CALL. (A {r 205)
            SCF
            RET    NZ
            LD     L,(IX+25)          ; HL <- Adr till INPUT-rutin.
            LD     H,(IX+26)
            INC    HL
            INC    HL                 ; HL <- Adr till generell I/O-rutin.
            AND    A                  ; Nolla Carry.
            RET
