;255-ös akciókód, RAMDISK létrehozás/törlés ld08e: CP B ;méret=0? JR Z,LD09A ;ha igen, akkor törlés CP L ;kezdőszegmens száma 0? LD A,9DH ;"RAM disk already exists" RET NZ ;hibával vissza BIT 7,B ;méret>127? LD A,0F7H ;"Insufficient memory" RET NZ ;hibával vissza ld09a: LD L,B ;L-be a méret LD BC,0 CALL LC329 ;memóriakezelő csatorna nyítása (FISH 23) RET NZ ;visszatérés, ha hiba CP L ;méret=0? JR Z,LD108 ;ha, igen ugrás a törlésre LD DE,4100H ;szegmenslista kezdete LD B,L ;B-be a méret LD L,01H ;első szegmens igénylése ld0ab: LD A,H ;memóriakezelő csatorna száma EXX ;registerek mentése LD B,0F0H ;szegmens igénylés kódja EXOS 0BH ; "Perform special function on channel" LD A,C ;kapott szegmens száma EXX ;registerek vissza JR NZ,LD113 ;ha hiba, akkor ugrás a törlésre, ;hogy az eddig lefoglalt szegmensek felszabaduljanak DEC L ;az első szegmens volt? JR NZ,LD0BD ;ugrás ha nem ;ha igen, akkor ez lesz a kezdőszegmens OUT (0B1H),A ;belapozása LD (IY+1DH),A ;letárolása ld0bd: INC L ;szegmensszámláló vissza INC L ;növelése eggyel LD (DE),A ;szegmensszám letárolása INC DE ;lista mutató növelése DJNZ LD0AB LD (4180H),HL ;4180H-ra a méret+1 kerül LD A,H ;memóriakezelő csatorna EXOS 03H ; "Close channel" LD A,L ;méret+1 DEC A ;méret LD DE,400BH ;boot szektor adatterület LD HL,ld132 ;alapértékek LD BC,000BH LDIR ;másolás LD DE,4040H ;VOL_ID helye LD C,0BH LDIR ;átmásolás LD C,A ;méret mentése C-be SRL A ;méret/2 SRL A ;méret/4 ADD A,04H ;méret/4+4 LD L,A LD H,B ;H=0 ADD HL,HL ;(méret/4+4)*2 ADD HL,HL ;(méret/4+4)*4 ADD HL,HL ;(méret/4+4)*8 ADD HL,HL ;(méret/4)*16+64, azaz a főkönyvtár ;legalább 64 bejegyzés méretű, plusz 4 szegmensenként 16 újabb bejegyzés LD (4011H),HL ;főkönyvtár mérete LD H,B LD L,C ;HL=méret ADD HL,HL ;*2 ADD HL,HL ;*4 ADD HL,HL ;*8 ADD HL,HL ;*16 ADD HL,HL ;*32 LD (4013H),HL ;szektorok száma LD E,L LD D,H ;LD DE,HL ADD HL,DE ;szektorok száma*2 ADD HL,DE ;szektorok száma*3 DEC HL ;szektorok száma*3-1 SRL H ;((szektorok száma*3-1)/256)/2 SRL H ;((szektorok száma*3-1)/256)/4 LD L,H LD H,B INC HL ;(((szektorok száma*3-1)/256)/4)+1 ;(szektorokszáma-(1/3))/(341+(1/3))+1 LD (4016H),HL ;FAT szektorok száma XOR A RET ld108: CP (IY+1DH) ;RAMDISK kezdőszegmense=0? JR Z,LD128 ;ha igen, akkor kilépés LD A,(4180H) ;RAMDISK méret+1 LD L,A ;ciklusszámlálóba XOR A ;nincs hiba DB 0C2H LD113: LD A,0F7H ;"Insufficient memory" hibakódja PUSH AF ;hibakód a verembe LD DE,4100H ;szegmensek listájának kezdete ld119: DEC L ;ciklusszámláló csökkentése JR Z,LD129 ;kilépés, ha vége LD B,0F1H ;szegmens felszabadítás kódja LD A,(DE) ;szegmensszám LD C,A ;C-be LD A,H ;a DISK:-hez megnyított csatorna száma PUSH DE ;szegmensmutató a verembe EXOS 0BH ; "Perform special function on channel" POP DE INC DE ;mutató nővelése JR LD119 ld128: PUSH AF ;hibakód a verembe ld129: LD A,H ;csatornaszám EXOS 03H ; "Close channel" POP AF ;hibakód LD (IY+1DH),00H ;kezdőszegmens számának törlése RET ;RAMDISK boot szektor alapértékek ld132: DW 200H ;512 bájt/szektor DB 01H ;1 szektor/cluster DW 01H ;1 boot szektor DB 02H ;2 FAT példány DW 00H ;főkönyvtár mérete, nincs kitöltve DW 00H ;szektorok száma, nincs kitöltve DB 2AH ;típusbájt ld13d: DB "VOL_ID" DB 00H ;UNDEL jelzőbájt DB 00H,00H,00H,00H ;lemezazonosító