;RAMDOS II (c)1987 ;WILFRIGTER START BIT 7,(IY+8);IF RUN MODE JP Z E6C;THEN RAND DIR LD DE,2101;32 FILES,FIRST PUSH DE DIR0 CALL F2B;GO SLOW LD BC,0000;TOP OF DISPLAY CALL 8F5;PRINT AT LD HL,4021;BANK REG COPY LD A,(HL);WRITE PROTECT AND 7;ON BANK 0 TO 7 LD (HL),A;SAVE COPY LD (1000),A;LOAD BANK REG ADD A,1C;PRINT BANK CHR$ RST 10 LD A,76;PRINT N/L RST 10 POP DE;D=FILE COUNT, PUSH DE;E=CURSOR FILE LD HL,8000;RAMDISK START DIR2 LD B,8;NAME+TYPE=8 CHR$ DEC D;DEC FILE CNTR LD (4032),HL;END OF DIR JR Z KEYS;IF LAST FILE XOR A;PRINT LEADING SPACE DEC E;OR IF CURSOR FILE JR NZ DIR3 LD (407B),HL;SAVE CURSOR LD A,92;AND PRINT ">" DIR3 RST 10 LD A,(HL);LOOP 8 TIMES AND BF;TO PRINT NAME INC HL;AND TYPE DJNZ DIR3 LD B,A;FIRST PRINT "." LD A,"." RST 10 LD A,B;NOW PRINT TYPE RST 10 XOR A;PRINT SPACE RST 10 PUSH DE;SAVE FILE COUNTER LD E,(HL);GET FILE LENGTH INC HL LD D,(HL) RES 7,D INC HL ADD HL,DE;POINT TO NEXT PUSH HL;SAV NXT FILE PNTR LD HL,4033;SET UP FOR LD (HL),E;DECIMAL PRINT DEC HL LD (HL),D CALL AA5 XOR A;PRINT SPACE RST 10 POP HL POP DE JR DIR2;LOOP 32 TIMES DIR1B CALL A2A;CLEAR DISPLAY DIR0A JR DIR0;PRINT DIRECTORY KEYS LD A,(4021);ENABLE WRITE OR 8;TO RAMDISK LD (1000),A;LOAD WR BIT KEYS1 CALL 2BB PUSH HL POP BC INC L JR Z KEYS1 CALL F4B CALL 7BD;KEYBOARD DECODE JR NC KEYS1 ADC A,A;NON ZERO REG A LD A,(HL);DECODED CHR$ LD B,+16;CHECK 15 COMMAND LD DE,0011;TOP CMND TABLE CALL AC8;WHERE ARE WE? ADD HL,DE;POINT TO TABLE KEYS3 CP (HL);COMP DECODE CHR$ INC HL JR Z KEYS4;IF CHR$=CMND INC HL DJNZ KEYS3;NEXT CMND JP (HL);NO CMND BYE KEYS4 LD E,(HL);GET +256 OFFSET ADD HL,DE;HL=CMND SUB POP DE;GET FILE CNTR PUSH HL;SETUP CMND SUB JP LD HL,4021;BANK REG COPY RET;JUMP TO CMND SUB KEY2 ;CMND TABLE: CHR$/OFFSET "5";CURSOR LEFT 3C "6";CURSOR DOWN 35 "7";CURSOR UP 37 "8";CURSOR RIGHT 32 "Q";QUIT 26 " ";BREAK 24 "N";NAME 45 "B";BASIC PROGRAM SAVE 7D "V";VARIABLE AREA SAVE 7B "M";1 REM LINE M/C SAVE 79 "L";LOAD ANY FILE D8 E0;SHIFTED "E"RASE D6 "1";NEXT BANK 0B "2";PREVIOUS BANK 07 "R";RUN FROM LINE 1 0B "T";SET FILE TYPE 27 DIR1A JR DIR1B;PRINT DIRECTORY BNKDN DEC (HL);PREVIOUS BANK DEC (HL) BNKUP INC (HL);NEXT BANK DIR0D PUSH DE;SAVE FILE CNTR JR DIR0A;PRINT DIRECTORY RUN LD DE,407D;START OF BASIC LD (4029),DE;NXTLINE VARS QUIT LD A,(HL);HL=4021 AND 7;WRITE PROTECT WHEN LD (1000),A;WE QUIT/RUN JP F4B DOWN INC E;CURSOR DOWN RIGHT INC E;CURSOR RIGHT INC E INC E UP DEC E;CURSOR UP LEFT DEC E;CURSOR LEFT DEC E LD A,E AND 1F LD E,A INC E JR DIR0D;PRINT DIRECTORY TYPE LD BC,709;(407B)+7=TYPE LD HL,407B TYPE1 INC (HL) DJNZ TYPE1 INC B;TYPE=1 LETTER JR TEXT0 TEXT LD BC,701;NAME=7 LETTERS TEXT0 PUSH DE PUSH BC LD A,E;CONVERT FILE NO. INC A;TO PRINT POSITION RRA LD B,A SBC A,A AND 10 ADD A,C LD C,A CALL 8F5;PRINT AT=BC POP BC LD HL,(407B);CURSOR FILE TEXT1 PUSH BC PUSH HL LD HL,(400E) SET 7,(HL) TEXT2 BIT 0,(IY+59);KEY DOWN? JR Z TEXT2 LD BC,(4025) CALL F4B;DEBOUNCE CALL 7BD;DECODE KEY JR NC TEXT2 LD A,(HL);KEY CHR$ AND BF RST 10 POP HL LD (HL),A;CHR$ TO FILE INC HL POP BC DJNZ TEXT1 DIR1C JR DIR1A;PRINT DIRECTORY SAVE PUSH DE;SAVE FILE CNTR PUSH AF;SAVE FILE TYPE LD DE,407D;START OF BASIC SAVEV CP "V" JR NZ SAVEB LD DE,(4010);START OF VAR LD HL,(4014);END OF VAR+1 DEC HL;END OF VARIABLES SAVEB CP "B" JR NZ SAVEM LD HL,(400C);END OF BASIC SAVEM CP "M" JR NZ SAVE1 LD HL,407F;LINE 1 LENGTH LD C,(HL);IN BC INC HL LD B,(HL) INC HL;REM DE=BASIC START ADD HL,BC;HL = NEXT LINE SAVE1 CALL A17;LENGTH OF FILE DEC DE PUSH BC LD A,B;IS IT ZERO LENGTH? OR C JR Z DIR1E LD HL,000A;NAME+TYPE+LEN ADD HL,BC;+FILE LENGTH JR C DIR1E;IS IT >FFFF? LD BC,(4032);END OF DIR DEC BC ADD HL,BC;NEW END OF DIR JR C DIR1E;IS IT >FFFF? PUSH DE PUSH BC EX (SP),HL LD DE,(407B);CURSOR ADDRS CALL 9D0;ADD HL,DE AND EX POP HL EX DE,HL LDDR;MAKE ROOM POP HL POP BC PUSH BC LDDR;SAVE FILE POP BC;REM FILE LENGTH POP AF;REM FILE TYPE EX DE,HL LD (HL),B;SAVE FILE LEN DEC HL LD (HL),C LD B,8 NAME DEC HL;FIRST SAVE TYPE LD (HL),A XOR A;THEN BLANK FILENAME DJNZ NAME PUSH AF PUSH BC DIR1E POP BC;>FFFF ERROR ENTRY POP AF DIR1D JR DIR1C;PRINT DIRECTORY LOAD PUSH DE;SAVE FILE CNTR LD E,A;SAVE CMD LD HL,(407B);CURSOR ADDRS LD B,8;CHECK LOCKED FILE LOAD1 LD A,(HL);CHECK IF NAME CP 40;OR TYPE INVERTED JR NC DIR1D;LOCKED FILE? INC HL DJNZ LOAD1;8 CHR$ LD C,(HL);BC=FILE LENGTH INC HL LD B,(HL) INC HL LD D,A;SAVE TYPE LD A,E;REM CMD CP E0;IS IT ERASE? JR Z ERASE LD A,(4021);WRITE PROTECT AND 7;RAM DISK IN CASE OF LD (1000),A;SYSTEM CRASH LD A,B OR C JR Z DIR1D;ZERO LENGTH? LD A,D;REM TYPE CP "V" JR Z LOADV CP "B" JR Z LOADB CP "M" JR NZ DIR1D LOADD LD A,08 LODD1 LD E,(HL);GET RUN ADDRESS INC HL DEC BC DEC A JR NZ LODD1 LD D,(HL) INC HL DEC BC DEC BC JR LODV2;LOAD M/C FILE LOADB PUSH HL CALL F23;FAST DISPLAY MOV LD HL,407C;BASIC START PUSH BC PUSH HL CALL 99E;MAKE ROOM FOR POP DE;BASIC PROGRAM INC DE JR LODV1;LOAD BASIC FILE LOADV PUSH HL LD HL,(4010);TOP OF VARS PUSH BC PUSH HL CALL 99E;MAKE ROOM POP DE LODV1 POP BC POP HL LODV2 LDIR;LOAD FILE JR DIR1D ERASE ADD HL,BC;HL=END OF FILE LD DE,(4032);END OF DIR INC DE EX DE,HL CALL A17;BC=HL-DE LD DE,(407B);FILE START LDIR;RECLAIM FILE CALL A17;NEW DIR END-OLD PUSH HL;GOOD HOUSEKEEPING POP DE;REMOVE GARBAGE AND XOR A;FILL TO OLD DIR END DEC HL LD (HL),A;WITH ZEROES JR LODV2;FILL WITH LDIR NOP NOP EXIT