1 REM Ins{nd av Anders Franz`n <5258> 1986-03-07 22.00.24 ; RAM ; Anders Franz`n <5258> ; Stockholm januari 1986 ; Rutin som l{nkar in en ny enhet i ; enhetslistan. P} denna enhet kan man ; skriva och l{sa data precis som fr}n ; en vanlig sekventiell fil. ; D} RAM: l{nkas in i enhetslistan ; allokeras enhetens minnesutrymme. ; Det sker genom att STACK-pekaren ; s{nks s} mycket att beg{rt utrymme ; f}r plats ovanf|r STACKen. Arean ; finns kvar i minnet till RESET ; trycks. Det {r s}ledes m|jligt att ; spara data p} RAM: d} CHAIN till ett ; annat program g|rs. ; PREPARE t|mmer den allokerade arean. ; OPEN ger felkod 21 om arean {r tom. ; PRINT ger felkod 41 om arean {r full. ; INPUT ger felkod 34 vid f|rs|k att ; l{sa poster efter den sista. DEVROT EQU 254:10 BOFA EQU 254:28 HEAP EQU 254:32 STACK EQU 254:39 ; Initieringsrutinen placeras i en ; kassettbuffert d} den bara anv{nds ; en g}ng. Inv{rdet, antal bytes som ; RAM-arean skall best} av, placeras ; i register DE. ORG 251:0 INIT LD HL,(DEVROT) LD BC,L[NK INIT1 LD A,H Slut p} OR L enhets-lista ? JRZ INIT2 Ja, hoppa PUSH HL AND A SBC HL,BC Finns RAM: redan POP HL i listan ? RETZ Ja, hoppa LD A,(HL) Adress till INC HL n{sta l{nk LD H,(HL) LD L,A JR INIT1 Leta vidare INIT2 LD HL,(STACK) LD BC,L[NK AND A PUSH HL SBC HL,BC POP HL JRC INIT3 STACK < L[NK LD L,C F|rst|r ej LD H,B programmet!! INIT3 LD (MAX),HL SBC HL,DE LD DE,(HEAP) INC D PUSH HL SBC HL,DE R{cker utrymmet? POP DE LD A,128+3 JPC 0:18 Nej, ERR 3 LD (STACK),DE Nytt stackv{rde LD HL,INIT4 LD BC,INIT5-INIT4 LDIR Fixa val p} EX DE,HL TED-meny! LD (TXT),HL Pekare till area LD (HL),0 Rensa RAM-arean LD HL,(DEVROT) LD (L[NK),HL Spara RAM: i LD HL,L[NK enhetslistan LD (DEVROT),HL LD A,192 DOS-buffert 2 LD (253:97),A upptagen! RET INIT4 DEFM "5 TILL BASIC",195 DEFW BASIC INIT5 EQU $ ; Huvudprogrammet placeras ovanf|r ; stacken och i en DOS-buffert som ; f|rhoppningsvis ej anv{nds. ORG 247:0 L[NK DEFS 2 DEFM "RAM" DEFW JPTAB JPTAB JP OPEN JP PREPARE JP CLOSE JP 0:21 L{s ASCII JP 0:27 Skriv ASCII JP BLOCKIN JP BLOCKUT JP 7:39 DELETE och JP 7:39 RENAME finns ej OPEN LD HL,(TXT) LD A,(HL) AND A JRNZ PREPARE1 SCF RET PREPARE LD HL,(TXT) LD (HL),0 T|m RAM-arean PREPARE1 XOR A LD (IX+6),A Radposition LD (IX+7),120 Max radl{ngd LD (IX+8),L Adress till LD (IX+9),H buffer LD (IX+10),L Aktuell position LD (IX+11),H i buffer LD (IX+13),253 Kvar i buffer LD (IX+14),A Inget skrivet RET CLOSE LD A,(IX+14) AND A RETZ XOR A LD B,6 LD E,(IX+10) LD D,(IX+11) Aktuell position CLOSE1 LD (DE),A INC DE DJNZ CLOSE1 RET BLOCKIN CALL NYBLOCK EX DE,HL RETNC RST 16 Record utanf|r DEFB 128+34 filen BLOCKUT CALL NYBLOCK LD (IX+13),253 Kvar i buffer SET 0,(IX+14) Buffert skriven RETNC RST 16 DEFB 128+41 RAM-arean full NYBLOCK LD E,(IX+8) LD D,(IX+9) Buffertadress INC D LD HL,(MAX) DEC H AND A SBC HL,DE RETC Utanf|r arean LD (IX+8),E LD (IX+9),D Ny buffertadress LD (IX+10),E LD (IX+11),D Ny position RET ; Hoppa till BASIC fr}n TED. BASIC LD HL,(DEVROT) Ta bort LD E,(HL) TED: fr}n INC HL enhetslistan! LD D,(HL) LD (DEVROT),DE LD L,0 LD (BOFA),HL S{nk BOFA JP 0:198 Till ROM TXT DEFS 2 MAX DEFS 2 SLUT END