SDOS: PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY LD C,3 CALL INTMOUS PUSH DE PUSH HL CALL INTOFF DI LD A,(DOSPAGE) OUT (PAGE0),A ; LD BC,#1FFD ; LD A,1 ; OUT (C),A POP HL POP DE LD C,4 RST #30 LD C,#83 RST #30 POP IY POP IX POP HL POP DE POP BC POP AF RET RDOS: DI PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY LD C,2 RST #30 LD C,3 RST #30 PUSH DE PUSH HL LD A,(WINPAGE) OUT (PAGE0),A POP HL POP DE LD C,4 CALL INTMOUS LD C,1 CALL INTMOUS CALL INTON ; LD BC,#1FFD ; LD A,0 ; OUT (C),A ; POP HL ; POP DE ; LD C,4 ; CALL INTMOUS POP IY POP IX POP HL POP DE POP BC POP AF EI RET REALN: DB "12345678.123",0 MFL: LD HL,DIRITEM LD DE,REALN LD BC,#0820 RDF1: LD A,(HL) LD (DE),A CP C JR Z,RDF2 INC HL INC DE DJNZ RDF1 RDF2: LD A,"." LD (DE),A INC DE LD HL,EXTITEM LD BC,#0320 RDF3: LD A,(HL) LD (DE),A CP C JR Z,RDF4 INC HL INC DE DJNZ RDF3 RDF4: XOR A LD (DE),A RET SV_FILE: CALL MFL CALL SDOS IN A,(#E2) PUSH AF LD HL,REALN CALL SAVERAM ; LD A,#0D ; LD C,#F1 ;!!! ; RST #10 EX AF,AF' CALL RDOS POP AF OUT (#E2),A EX AF,AF' RET SAVERAM: XOR A LD C,#0A ;CREATE FILE RST #10 RET C LD (F_HANDLE),A ; LD HL,0 ; LD IX,0 ; LD A,(F_HANDLE) ; LD BC,#0215 ;MOVE FILE POINTER TO END FILE ; RST #10 ; LD (SIZE1),HL ; LD (SIZE0),IX ; CALL MEM_CLK ; JR C,CSFIL CALL WRBLK ;CSFIL LD A,(F_HANDLE) LD C,#12 ;CLOSE FILE RST #10 RET WRBLK: ; LD HL,0 ; LD IX,0 ; LD A,(F_HANDLE) ; LD BC,#0015 ;MOVE FILE POINTER TO START FILE ; RST #10 LD A,#0D ;RAM DISK NUMBER LD C,#CE ;GET RAM DISK'S ID RST #08 RET C LD B,0 LD C,#C4 ;GET PHISICAL PAGE NUMBER RST #08 RET C LD DE,(FHSIZE) LD HL,(FLSIZE) BWAGAIN: AND A LD BC,#4000 SBC HL,BC EX DE,HL LD BC,#0000 SBC HL,BC EX DE,HL JR C,ENDBLOKSAVE PUSH DE PUSH HL CALL WR1 POP HL POP DE JR NC,BWAGAIN RET ENDBLOKSAVE: LD BC,#4000 ADD HL,BC EX DE,HL PUSH AF OUT (PAGE3),A ;;;;;;;;;; LD A,7 OUT (#FE),A ;;;;;;;;;; LD HL,#C000 ; LD DE,#4000 LD C,#14 ;WRITE FILE LD A,(F_HANDLE) RST #10 POP BC RET C RET WR1: ;BWAGAIN PUSH AF OUT (PAGE3),A LD HL,#C000 LD DE,#4000 LD C,#14 ;WRITE FILE LD A,(F_HANDLE) RST #10 POP BC RET C CP #FF SCF RET Z LD A,B LD C,#C7 ;GET NEXT PAGE RST #08 RET C CP #FF SCF RET Z AND A RET RD_FILE: CALL MFL CALL SDOS IN A,(#E2) PUSH AF LD HL,REALN CALL READRAM ; LD A,#0D ; LD C,#F0 ; RST #10 EX AF,AF' CALL RDOS POP AF OUT (#E2),A EX AF,AF' RET F_HANDLE: DB 0 SIZE0: DW 0 SIZE1: DW 0 READRAM: XOR A LD C,#11 ;OPEN FILE RST #10 RET C LD (F_HANDLE),A LD HL,0 LD IX,0 LD A,(F_HANDLE) LD BC,#0215 ;MOVE FILE POINTER TO END FILE RST #10 LD (SIZE1),HL LD (SIZE0),IX CALL MEM_CLK JR C,CLFIL CALL RDBLK CLFIL: LD A,(F_HANDLE) LD C,#12 ;CLOSE FILE RST #10 RET MEM_CLK: LD HL,(SIZE1) LD BC,(SIZE0) LD DE,16384 XOR A SCF KBT01: RR D RR E JR C,KBT02 RR H RR L RR B RR C JR NC,KBT01 LD A,1 JR KBT01 KBT02: OR A JR Z,KBT03 INC BC KBT03: XOR A CP B SCF RET NZ LD B,C ;SIZE IN BLOCKS 16k PUSH BC LD A,#0D LD C,#93 RST #08 POP BC LD A,#0D LD C,#92 RST #08 RET RDBLK: LD HL,0 LD IX,0 LD A,(F_HANDLE) LD BC,#0015 ;MOVE FILE POINTER TO START FILE RST #10 LD A,#0D ;RAM DISK NUMBER LD C,#CE ;GET RAM DISK'S ID RST #08 RET C LD B,0 LD C,#C4 ;GET PHISICAL PAGE NUMBER RST #08 RET C BLAGAIN: PUSH AF OUT (PAGE3),A LD HL,#C000 LD DE,#4000 LD C,#13 ;READ FILE LD A,(F_HANDLE) RST #10 POP BC RET C CP #FF RET Z LD A,B LD C,#C7 ;GET NEXT PAGE RST #08 RET C CP #FF JR NZ,BLAGAIN RET RD_DIR: LD A,(DISK) CALL CHDISK LD HL,PATH CALL CHDIR CALL GET_DIR RET GET_DIR: CALL SDOS IN A,(#E2) PUSH AF LD A,(DIRPAGE) OUT (#E2),A LD HL,#C000 LD DE,#C001 LD BC,#3FFF LD (HL),L LDIR CALL READDIR PUSH AF CALL RDOS CALL SORT LD HL,PLACED LD DE,#C000 LD BC,#2000 LDIR POP AF EX AF,AF' POP AF OUT (#E2),A EX AF,AF' RET DIRBUF: DS 44 PATH0: DB "*.*",0 READDIR: ; LD HL,PATH0 ; LD C,#1E ;CURDIR ; RST #10 LD HL,PATH0 LD DE,DIRBUF LD A,#37 LD BC,#0019 ;F_FIRST RST #10 LD DE,#C000 ;DIR JR C,NO_DIR F_NEXT_ENTRY: LD A,(DIRBUF+32) ;ATTRIBUT ; BIT 4,A ; CALL Z,TOLOWER LD HL,DIRBUF+33 ;NAME LD BC,11 LDIR LD (DE),A INC DE LD HL,DIRBUF+12 ;OTHER INFORMATION LD BC,20 LDIR PUSH DE LD DE,DIRBUF LD C,#1A ;F_NEXT RST #10 POP DE JR NC,F_NEXT_ENTRY NO_DIR: EX DE,HL LD (HL),0 RET CHDISK: PUSH AF CALL SDOS POP AF LD C,1 RST #10 PUSH AF CALL RDOS POP AF RET CHDIR: CALL SDOS LD C,29 RST #10 PUSH AF CALL RDOS POP AF RET NC LD (#BF00),A LD A,7 OUT (#FE),A LD IY,#5C3A RET CH_DIR: LD DE,CHPATH LD BC,11 LDIR EX DE,HL LD B,11 LD A,#20 RUN002: DEC HL CP (HL) JR NZ,RUN003 DJNZ RUN002 RUN003: INC HL LD (HL),'\' ; INC HL LD (HL),#00 LD HL,CHPATH CALL CHDIR CALL GET_DIR RET DISK: DB #02 CHPATH: DB "123456781230",0 PATH: DB 'C:' ; ;DB 'C:\' ; ;!FIXIT DS 255 DIRS: DEFW 0 POSITER: DEFW 0 FILES: DEFW 0 SORT: LD IX,#C000 LD HL,#E020 LD (ENDSORT),HL LD HL,0 LD (FILES),HL SORT_: LD A,(IX+0) CP #E5 JP Z,ADDERA OR A RET Z CP "." JP NZ,SORTC LD A,(IX+1) CP #20 JP Z,ADDERA SORTC: LD A,(IX+11) LD E,A AND #08 JP NZ,ADDERA LD A,E AND #10 JP NZ,ITDIREC LD B,11 LD D,XH LD E,XL SORT_00: LD A,(DE) CP "A" JP C,SORT_01 CP "[" JP NC,SORT_01 ADD A,#20 SORT_01: LD (DE),A INC DE DJNZ SORT_00 ITDIREC: LD D,XH LD E,XL CALL SORTER LD HL,(FILES) INC HL LD (FILES),HL ADDERA: LD BC,#0020 ADD IX,BC JP SORT_ SORTER: LD HL,PLACED SORTER0: LD A,(HL) OR A JP Z,SORTINS PUSH DE PUSH HL LD B,11 SORT1: LD A,(DE) ;(DE) < (HL) "C" CP (HL) ;(DE) >= (HL) "NC" JP NZ,SORT2 INC DE INC HL DJNZ SORT1 SORT2: POP HL POP DE JP C,SORTINS SORT3: LD BC,#0020 ADD HL,BC JP SORTER0 SORTINS: PUSH DE PUSH HL EX DE,HL LD HL,(ENDSORT) PUSH HL AND A SBC HL,DE LD B,H LD C,L POP DE LD HL,#0020 ADD HL,DE LD (ENDSORT),HL JP Z,EMPPLC EX DE,HL DEC HL DEC DE LDDR EMPPLC: POP DE POP HL LD BC,#0020 LDIR RET ENDSORT: DEFW #E020 PLACED: EQU #E000