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