diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..7355856 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "Shared_Includes"] + branch = main + path = Shared_Includes + url = https://github.com/Tolik-Trek/Shared_Includes.git diff --git a/DOS_EQU.ASM b/DOS_EQU.ASM new file mode 100644 index 0000000..724abcc --- /dev/null +++ b/DOS_EQU.ASM @@ -0,0 +1,71 @@ + +VERSION EQU #00 +CHDISK EQU #01 +CURDISK EQU #02 +DSKINFO EQU #03 +G_ENTRY EQU #04 + +BOOTDSK EQU #09 +CREATE EQU #0A +CREAT_N EQU #0B +ERASE EQU #0D +DELETE EQU #0E +MOVE EQU #0F +RENAME EQU #10 +OPEN EQU #11 +CLOSE EQU #12 +READ EQU #13 +WRITE EQU #14 +MOVE_FP EQU #15 +ATTRIB EQU #16 +GET_D_T EQU #17 +PUT_D_T EQU #18 +F_FIRST EQU #19 +F_NEXT EQU #1A +MKDIR EQU #1B +RMDIR EQU #1C +CHDIR EQU #1D +CURDIR EQU #1E +SYSTIME EQU #21 +SETTIME EQU #22 + +WAITKEY EQU #30 +SCANKEY EQU #31 +ECHOKEY EQU #32 +CTRLKEY EQU #33 +EDIT EQU #34 +K_CLEAR EQU #35 + +SETWIN EQU #38 +SETWIN1 EQU #39 +SETWIN2 EQU #3A +SETWIN3 EQU #3B +FREEMEM EQU #3C +GETMEM EQU #3D +RETMEM EQU #3E +SETMEM EQU #3F + +EXEC EQU #40 +EXIT EQU #41 +WAIT EQU #42 + +GSWITCH EQU #43 +DOSNAME EQU #44 + +SETVMOD EQU #50 +GETVMOD EQU #51 +LOCATE EQU #52 +CURSOR EQU #53 +SELPAGE EQU #54 +SCROLL EQU #55 +CLEAR EQU #56 +RDCHAR EQU #57 +WRCHAR EQU #58 +WINCOPY EQU #59 +WINREST EQU #5A +PUTCHAR EQU #5B +PCHARS EQU #5C +RES_PRN EQU #5D +CTRLPRN EQU #5E +PRINT EQU #5F + diff --git a/Original/A.BAT b/Original/A.BAT new file mode 100644 index 0000000..40abf30 --- /dev/null +++ b/Original/A.BAT @@ -0,0 +1,13 @@ +@echo Assembling . . . +@c:\asm\as80 -i -x3 -l -n ramdrive.asm +@if errorlevel=3 goto error +@goto good +:error +@echo ----------------------------------------------------------------------- +@echo │ ERROR ERROR │ +@echo ----------------------------------------------------------------------- +@goto quit +:good +@del ramdrive.exe +@ren ramdrive.bin ramdrive.exe +:quit diff --git a/Original/CREATE.BAT b/Original/CREATE.BAT new file mode 100644 index 0000000..dc94442 --- /dev/null +++ b/Original/CREATE.BAT @@ -0,0 +1,25 @@ +@if %1x == x goto usage +@echo @echo Assembling . . . > a.bat +@echo @c:\asm\as80 -i -x3 -l -n %1.asm >> a.bat +@echo @if errorlevel=3 goto error >> a.bat +@echo @goto good >> a.bat +@echo :error >> a.bat +@echo @echo ----------------------------------------------------------------------- >> a.bat +@echo @echo │ ERROR ERROR │ >> a.bat +@echo @echo ----------------------------------------------------------------------- >> a.bat +@echo @goto quit >> a.bat +@echo :good >> a.bat +@echo @del %1.exe >> a.bat +@echo @ren %1.bin %1.exe >> a.bat +@echo :quit >> a.bat +@echo   +@echo Project has been created. +@echo   +@goto quit +:usage +@echo   +@echo Usage: +@echo   +@echo CREATE.BAT PROJECT_NAME +@echo   +:quit \ No newline at end of file diff --git a/Original/DOS_EQU.ASM b/Original/DOS_EQU.ASM new file mode 100644 index 0000000..724abcc --- /dev/null +++ b/Original/DOS_EQU.ASM @@ -0,0 +1,71 @@ + +VERSION EQU #00 +CHDISK EQU #01 +CURDISK EQU #02 +DSKINFO EQU #03 +G_ENTRY EQU #04 + +BOOTDSK EQU #09 +CREATE EQU #0A +CREAT_N EQU #0B +ERASE EQU #0D +DELETE EQU #0E +MOVE EQU #0F +RENAME EQU #10 +OPEN EQU #11 +CLOSE EQU #12 +READ EQU #13 +WRITE EQU #14 +MOVE_FP EQU #15 +ATTRIB EQU #16 +GET_D_T EQU #17 +PUT_D_T EQU #18 +F_FIRST EQU #19 +F_NEXT EQU #1A +MKDIR EQU #1B +RMDIR EQU #1C +CHDIR EQU #1D +CURDIR EQU #1E +SYSTIME EQU #21 +SETTIME EQU #22 + +WAITKEY EQU #30 +SCANKEY EQU #31 +ECHOKEY EQU #32 +CTRLKEY EQU #33 +EDIT EQU #34 +K_CLEAR EQU #35 + +SETWIN EQU #38 +SETWIN1 EQU #39 +SETWIN2 EQU #3A +SETWIN3 EQU #3B +FREEMEM EQU #3C +GETMEM EQU #3D +RETMEM EQU #3E +SETMEM EQU #3F + +EXEC EQU #40 +EXIT EQU #41 +WAIT EQU #42 + +GSWITCH EQU #43 +DOSNAME EQU #44 + +SETVMOD EQU #50 +GETVMOD EQU #51 +LOCATE EQU #52 +CURSOR EQU #53 +SELPAGE EQU #54 +SCROLL EQU #55 +CLEAR EQU #56 +RDCHAR EQU #57 +WRCHAR EQU #58 +WINCOPY EQU #59 +WINREST EQU #5A +PUTCHAR EQU #5B +PCHARS EQU #5C +RES_PRN EQU #5D +CTRLPRN EQU #5E +PRINT EQU #5F + diff --git a/Original/RAMDRIVE.ASM b/Original/RAMDRIVE.ASM new file mode 100644 index 0000000..88609da --- /dev/null +++ b/Original/RAMDRIVE.ASM @@ -0,0 +1,260 @@ + + ORG #8100-512 + INCLUDE "DOS_EQU.ASM" +PAGE3 EQU #E2 +CR EQU 13 +LF EQU 10 +EN EQU 00 + + DB "EXE" ;EXE ID + DB #00 ;EXE VERSION + DW #0200 ;CODE OFFSET LOW + DW #0000 ;CODE OFFSET HIGH + DW #0000 ;END-BEG ;PRIMARY LOADER + DW #0000 ; + DW #0000 ;RESERVED + DW #0000 ; + DW #8100 ;LOAD ADDRESS + DW #8100 ;START ADDRESS + DW #BFFF ;STACK ADDRESS + DS 490 +BEG LD HL,MS0 + LD C,PCHARS + RST #10 + DI + LD BC,#00CE +NEXTRD LD A,B + PUSH BC + RST #08 + POP BC + OR A + JR Z,FNDRD + INC B + LD A,B + CP #10 + JR NZ,NEXTRD + JP NORAMD +FNDRD PUSH BC + LD C,#C2 ;GET MEMORY + LD B,45 + RST #08 + POP BC + JP C,NOMEM + PUSH AF + LD C,A + LD A,B + LD B,C + LD C,#C9 + RST #08 + POP AF + LD C,PAGE3 + IN B,(C) + OUT (C),A + PUSH BC + LD HL,#C000 + LD DE,#C001 + LD BC,#3FFF + LD (HL),L + LDIR + LD HL,BPB + LD DE,#C000 + LD BC,BPBEND-BPB + LDIR + LD HL,#AA55 + LD (#C200-2),HL + LD HL,#C200 + LD (HL),#F9 + INC L + LD (HL),#FF + INC L + LD (HL),#FF + INC L + LD (HL),#00 + + LD HL,#C200+(512*5) + LD (HL),#F9 + INC L + LD (HL),#FF + INC L + LD (HL),#FF + INC L + LD (HL),#00 + + POP BC + OUT (C),B + LD HL,MS1 + LD C,PCHARS + RST #10 + LD B,#00 +EXITT LD C,#41 + RST #10 + DI + HALT + +NORAMD LD HL,MS2 + LD C,PCHARS + RST #10 + LD B,1 + JP EXITT + +NOMEM LD HL,MS3 + LD C,PCHARS + RST #10 + LD B,1 + JP EXITT + + +; +; RAMDRIVE 720 +; RAMDRIVE E:720 +; 0 1 2 3 4 5 6 7 8 9 A B C D E F +; + +;GETPARM LD A,#FF +; LD (RDRIVE),A +; LD (RSIZE),A +; LD D,XH +; LD E,XL +; EX DE,HL +; LD E,(HL) +; INC HL +; LD D,0 +; EX DE,HL +; ADD HL,DE +; LD (HL),0 +;NEXTPRM EX DE,HL +; LD DE,BUFFER +; LD C,GSWITCH +; RST #10 +; EX DE,HL ;SAVE HL IN DE +; LD HL,BUFFER +; LD A,(HL) +; INC HL +; OR A +; RET Z +; CP "/" +; JR NZ,NOSLASH +; LD A,(HL) +; INC HL +; CALL UPPER +; CALL ATOHEX +; JP C,ILLEGAL +; LD (RDRIVE),A +; LD A,(HL) +; OR A +; JR Z,NEXTPRM +; JP ILLEGAL +; +;NOSLASH CP ":" +; JP NZ,NOSIZER +; LD IX,0 +;NDIG LD C,XL +; LD B,XH +; ADD IX,IX ;X2 +; ADD IX,IX ;X4 +; ADD IX,BC ;X5 +; ADD IX,IX ;X10 +; JP C,ILLEGAL +; LD A,(HL) +; OR A +; JR Z,ENDSZ +; CALL UPPER +; CP "K" +; JR Z,ENDSZ +; CALL ATODEC +; LD C,A +; LD B,0 +; ADD IX,BC +; JR NDIG +;ENDSZ LD A,XL +; LD C,A +; LD B,XH +; SRL B +; RR C +; SRL B +; RR C +; SRL B +; RR C +; SRL B +; RR C +; AND #0F +; JR Z,L101 +; INC BC +;L101 LD A,B +; OR A +; JP NZ,ILLEGAL +; LD A,C +; LD (RSIZE),A +; JP NEXTPRM + +;NOSIZER JP ILLEGAL + +;ATODEC CP "0" +; RET C +; CP ":" +; CCF +; RET C +; SUB "0" +; RET + +;ATOHEX CP "0" +; RET C +; CP ":" +; JR NC,TRYHEX +; SUB "0" +; AND A +; RET +;TRYHEX CALL UPPER +; CP "A" +; RET C +; CP "G" +; CCF +; RET C +; SUB "A" +; RET + +;UPPER CP "a" +; RET C +; CP "z"+1 +; RET NC +; SUB #20 +; RET + +MS0 DB "RAMDRIVE DRIVER (C) 1999 PETERS Plus ltd.",CR,LF,CR,LF,EN + +MS1 DB "RAM DISK created",CR,LF,EN + +MS2 DB "No free RAM-DISK",CR,LF,EN + +MS3 DB "No free memory, for create RAM-DISK",CR,LF,EN + +MS4 DB "Illegal parametr",CR,LF,EN + +MS5 DB "Usage : RAMDRIVE [/drive 0...F] [:size]",CR,LF,EN + +; Area for boot sector [512Bytes] +BPB DB #EB,#3C,#90 ; +00 JMP + DB "DOS_X.XX" ; +03 DOS NAME + +; Block Parameters BIOS + + DW #0200 ; +0B BYTE PER SECTOR + DB 1 ; +0D SECTORS PER CLUSTER + DW 1 ; +0E RESERVE SECTORS + DB 2 ; 1 ; +10 AMOUNT FATS + DW 112 ; +11 FILES IN DIRECTORY + DW 1440 ; +13 ALL SECTORS ON DISK + DB #FA ; +15 ID FORMAT + DW 5 ; +16 SIZE FAT IN SECTORS + DW 9 ; +18 SECTOR PER TRACK + DW 2 ; +1A AMOUNT SIDES + DW 0,0 ; +1C HIDDEN SECTORS + DW 0,0 ; +20 ALL SECTORS BIG + DW #0080 ; +24 PHISICAL DRIVE NUMBER + DB #29 ; +26 EXTENDED RECORD SIGNATURE + DW #104B,#D765 ; +27 SERIAL VOLUME NUMBER + DB "NO NAME ";+2B DISK LABEL + DB "FAT12" ; +36 FAT ID +BPBEND +; DEFS 453,0 +; end boot sector diff --git a/Original/RAMDRIVE.EXE b/Original/RAMDRIVE.EXE new file mode 100644 index 0000000..4df0790 Binary files /dev/null and b/Original/RAMDRIVE.EXE differ diff --git a/Original/RAMDRIVE.LST b/Original/RAMDRIVE.LST new file mode 100644 index 0000000..03aa3f6 --- /dev/null +++ b/Original/RAMDRIVE.LST @@ -0,0 +1,355 @@ +AS80 Assembler for i8080 [1.31]. Page 1 +-------------------------------- RAMDRIVE.ASM -------------------------------- + +331 lines read, no errors in pass 1. + +7f00 = ORG #8100-512 + INCLUDE "DOS_EQU.ASM" + +0000 = VERSION EQU #00 +0001 = CHDISK EQU #01 +0002 = CURDISK EQU #02 +0003 = DSKINFO EQU #03 +0004 = G_ENTRY EQU #04 + +0009 = BOOTDSK EQU #09 +000a = CREATE EQU #0A +000b = CREAT_N EQU #0B +000d = ERASE EQU #0D +000e = DELETE EQU #0E +000f = MOVE EQU #0F +0010 = RENAME EQU #10 +0011 = OPEN EQU #11 +0012 = CLOSE EQU #12 +0013 = READ EQU #13 +0014 = WRITE EQU #14 +0015 = MOVE_FP EQU #15 +0016 = ATTRIB EQU #16 +0017 = GET_D_T EQU #17 +0018 = PUT_D_T EQU #18 +0019 = F_FIRST EQU #19 +001a = F_NEXT EQU #1A +001b = MKDIR EQU #1B +001c = RMDIR EQU #1C +001d = CHDIR EQU #1D +001e = CURDIR EQU #1E +0021 = SYSTIME EQU #21 +0022 = SETTIME EQU #22 + +0030 = WAITKEY EQU #30 +0031 = SCANKEY EQU #31 +0032 = ECHOKEY EQU #32 +0033 = CTRLKEY EQU #33 +0034 = EDIT EQU #34 +0035 = K_CLEAR EQU #35 + +0038 = SETWIN EQU #38 +0039 = SETWIN1 EQU #39 +003a = SETWIN2 EQU #3A +003b = SETWIN3 EQU #3B +003c = FREEMEM EQU #3C +003d = GETMEM EQU #3D +003e = RETMEM EQU #3E +003f = SETMEM EQU #3F + +0040 = EXEC EQU #40 +0041 = EXIT EQU #41 +0042 = WAIT EQU #42 + +0043 = GSWITCH EQU #43 +0044 = DOSNAME EQU #44 + +0050 = SETVMOD EQU #50 +0051 = GETVMOD EQU #51 +0052 = LOCATE EQU #52 +0053 = CURSOR EQU #53 + AS80 Assembler for i8080 [1.31]. Page 2 +-------------------------------- RAMDRIVE.ASM -------------------------------- + +0054 = SELPAGE EQU #54 +0055 = SCROLL EQU #55 +0056 = CLEAR EQU #56 +0057 = RDCHAR EQU #57 +0058 = WRCHAR EQU #58 +0059 = WINCOPY EQU #59 +005a = WINREST EQU #5A +005b = PUTCHAR EQU #5B +005c = PCHARS EQU #5C +005d = RES_PRN EQU #5D +005e = CTRLPRN EQU #5E +005f = PRINT EQU #5F + + +00e2 = PAGE3 EQU #E2 +000d = CR EQU 13 +000a = LF EQU 10 +0000 = EN EQU 00 + +7f00 : 455845 DB "EXE" ;EXE ID +7f03 : 00 DB #00 ;EXE VERSION +7f04 : 0002 DW #0200 ;CODE OFFSET LOW +7f06 : 0000 DW #0000 ;CODE OFFSET HIGH +7f08 : 0000 DW #0000 ;END-BEG ;PRIMARY LOADER +7f0a : 0000 DW #0000 ; +7f0c : 0000 DW #0000 ;RESERVED +7f0e : 0000 DW #0000 ; +7f10 : 0081 DW #8100 ;LOAD ADDRESS +7f12 : 0081 DW #8100 ;START ADDRESS +7f14 : ffbf DW #BFFF ;STACK ADDRESS +7f16 : 00000000000000.. DS 490 +8100 : 219281 BEG LD HL,MS0 +8103 : 0e5c LD C,PCHARS +8105 : d7 RST #10 +8106 : f3 DI +8107 : 01ce00 LD BC,#00CE +810a : 78 NEXTRD LD A,B +810b : c5 PUSH BC +810c : cf RST #08 +810d : c1 POP BC +810e : b7 OR A +810f : 2809 JR Z,FNDRD +8111 : 04 INC B +8112 : 78 LD A,B +8113 : fe10 CP #10 +8115 : 20f3 JR NZ,NEXTRD +8117 : c37c81 JP NORAMD +811a : c5 FNDRD PUSH BC +811b : 0ec2 LD C,#C2 ;GET MEMORY +811d : 062d LD B,45 +811f : cf RST #08 +8120 : c1 POP BC +8121 : da8781 JP C,NOMEM +8124 : f5 PUSH AF +8125 : 4f LD C,A +8126 : 78 LD A,B +8127 : 41 LD B,C +8128 : 0ec9 LD C,#C9 +812a : cf RST #08 +812b : f1 POP AF +812c : 0ee2 LD C,PAGE3 +812e : ed40 IN B,(C) + AS80 Assembler for i8080 [1.31]. Page 3 +-------------------------------- RAMDRIVE.ASM -------------------------------- + +8130 : ed79 OUT (C),A +8132 : c5 PUSH BC +8133 : 2100c0 LD HL,#C000 +8136 : 1101c0 LD DE,#C001 +8139 : 01ff3f LD BC,#3FFF +813c : 75 LD (HL),L +813d : edb0 LDIR +813f : 214982 LD HL,BPB +8142 : 1100c0 LD DE,#C000 +8145 : 013b00 LD BC,BPBEND-BPB +8148 : edb0 LDIR +814a : 2155aa LD HL,#AA55 +814d : 22fec1 LD (#C200-2),HL +8150 : 2100c2 LD HL,#C200 +8153 : 36f9 LD (HL),#F9 +8155 : 2c INC L +8156 : 36ff LD (HL),#FF +8158 : 2c INC L +8159 : 36ff LD (HL),#FF +815b : 2c INC L +815c : 3600 LD (HL),#00 + +815e : 2100cc LD HL,#C200+(512*5) +8161 : 36f9 LD (HL),#F9 +8163 : 2c INC L +8164 : 36ff LD (HL),#FF +8166 : 2c INC L +8167 : 36ff LD (HL),#FF +8169 : 2c INC L +816a : 3600 LD (HL),#00 + +816c : c1 POP BC +816d : ed41 OUT (C),B +816f : 21c081 LD HL,MS1 +8172 : 0e5c LD C,PCHARS +8174 : d7 RST #10 +8175 : 0600 LD B,#00 +8177 : 0e41 EXITT LD C,#41 +8179 : d7 RST #10 +817a : f3 DI +817b : 76 HALT + +817c : 21d381 NORAMD LD HL,MS2 +817f : 0e5c LD C,PCHARS +8181 : d7 RST #10 +8182 : 0601 LD B,1 +8184 : c37781 JP EXITT + +8187 : 21e681 NOMEM LD HL,MS3 +818a : 0e5c LD C,PCHARS +818c : d7 RST #10 +818d : 0601 LD B,1 +818f : c37781 JP EXITT + + + ; + ; RAMDRIVE 720 + ; RAMDRIVE E:720 + ; 0 1 2 3 4 5 6 7 8 9 A B C D E F + ; + + ;GETPARM LD A,#FF + AS80 Assembler for i8080 [1.31]. Page 4 +-------------------------------- RAMDRIVE.ASM -------------------------------- + + ; LD (RDRIVE),A + ; LD (RSIZE),A + ; LD D,XH + ; LD E,XL + ; EX DE,HL + ; LD E,(HL) + ; INC HL + ; LD D,0 + ; EX DE,HL + ; ADD HL,DE + ; LD (HL),0 + ;NEXTPRM EX DE,HL + ; LD DE,BUFFER + ; LD C,GSWITCH + ; RST #10 + ; EX DE,HL ;SAVE HL IN DE + ; LD HL,BUFFER + ; LD A,(HL) + ; INC HL + ; OR A + ; RET Z + ; CP "/" + ; JR NZ,NOSLASH + ; LD A,(HL) + ; INC HL + ; CALL UPPER + ; CALL ATOHEX + ; JP C,ILLEGAL + ; LD (RDRIVE),A + ; LD A,(HL) + ; OR A + ; JR Z,NEXTPRM + ; JP ILLEGAL + ; + ;NOSLASH CP ":" + ; JP NZ,NOSIZER + ; LD IX,0 + ;NDIG LD C,XL + ; LD B,XH + ; ADD IX,IX ;X2 + ; ADD IX,IX ;X4 + ; ADD IX,BC ;X5 + ; ADD IX,IX ;X10 + ; JP C,ILLEGAL + ; LD A,(HL) + ; OR A + ; JR Z,ENDSZ + ; CALL UPPER + ; CP "K" + ; JR Z,ENDSZ + ; CALL ATODEC + ; LD C,A + ; LD B,0 + ; ADD IX,BC + ; JR NDIG + ;ENDSZ LD A,XL + ; LD C,A + ; LD B,XH + ; SRL B + ; RR C + ; SRL B + ; RR C + AS80 Assembler for i8080 [1.31]. Page 5 +-------------------------------- RAMDRIVE.ASM -------------------------------- + + ; SRL B + ; RR C + ; SRL B + ; RR C + ; AND #0F + ; JR Z,L101 + ; INC BC + ;L101 LD A,B + ; OR A + ; JP NZ,ILLEGAL + ; LD A,C + ; LD (RSIZE),A + ; JP NEXTPRM + + ;NOSIZER JP ILLEGAL + + ;ATODEC CP "0" + ; RET C + ; CP ":" + ; CCF + ; RET C + ; SUB "0" + ; RET + + ;ATOHEX CP "0" + ; RET C + ; CP ":" + ; JR NC,TRYHEX + ; SUB "0" + ; AND A + ; RET + ;TRYHEX CALL UPPER + ; CP "A" + ; RET C + ; CP "G" + ; CCF + ; RET C + ; SUB "A" + ; RET + + ;UPPER CP "a" + ; RET C + ; CP "z"+1 + ; RET NC + ; SUB #20 + ; RET + +8192 : 52414d44524956.. MS0 DB "RAMDRIVE DRIVER (C) 1999 PETERS Plus ltd.",CR, + +81c0 : 52414d20444953.. MS1 DB "RAM DISK created",CR,LF,EN + +81d3 : 4e6f2066726565.. MS2 DB "No free RAM-DISK",CR,LF,EN + +81e6 : 4e6f2066726565.. MS3 DB "No free memory, for create RAM-DISK",CR,LF,EN + +820c : 496c6c6567616c.. MS4 DB "Illegal parametr",CR,LF,EN + +821f : 5573616765203a.. MS5 DB "Usage : RAMDRIVE [/drive 0...F] [:size]",CR,LF + + ; Area for boot sector [512Bytes] +8249 : eb3c90 BPB DB #EB,#3C,#90 ; +00 JMP +824c : 444f535f582e5858 DB "DOS_X.XX" ; +03 DOS NAME + AS80 Assembler for i8080 [1.31]. Page 6 +-------------------------------- RAMDRIVE.ASM -------------------------------- + + + ; Block Parameters BIOS + +8254 : 0002 DW #0200 ; +0B BYTE PER SECTOR +8256 : 01 DB 1 ; +0D SECTORS PER CLUSTER +8257 : 0100 DW 1 ; +0E RESERVE SECTORS +8259 : 02 DB 2 ; 1 ; +10 AMOUNT FATS +825a : 7000 DW 112 ; +11 FILES IN DIRECTORY +825c : a005 DW 1440 ; +13 ALL SECTORS ON DISK +825e : fa DB #FA ; +15 ID FORMAT +825f : 0500 DW 5 ; +16 SIZE FAT IN SECTORS +8261 : 0900 DW 9 ; +18 SECTOR PER TRACK +8263 : 0200 DW 2 ; +1A AMOUNT SIDES +8265 : 00000000 DW 0,0 ; +1C HIDDEN SECTORS +8269 : 00000000 DW 0,0 ; +20 ALL SECTORS BIG +826d : 8000 DW #0080 ; +24 PHISICAL DRIVE NUMBER +826f : 29 DB #29 ; +26 EXTENDED RECORD SIGNATURE +8270 : 4b1065d7 DW #104B,#D765 ; +27 SERIAL VOLUME NUMBER +8274 : 4e4f204e414d45.. DB "NO NAME ";+2B DISK LABEL +827f : 4641543132 DB "FAT12" ; +36 FAT ID +8284 : BPBEND + ; DEFS 453,0 + ; end boot sector +No errors in pass 2. +Wrote binary from address $7f00 through $8283. +Total size 900 bytes. + \ No newline at end of file diff --git a/RAMDRIVE.ASM b/RAMDRIVE.ASM new file mode 100644 index 0000000..a826477 --- /dev/null +++ b/RAMDRIVE.ASM @@ -0,0 +1,266 @@ + + ORG #8100-512 + INCLUDE "DOS_EQU.ASM" +PAGE3 EQU #E2 +CR EQU 13 +LF EQU 10 +EN EQU 00 + + DB "EXE" ;EXE ID + DB #00 ;EXE VERSION + DW #0200 ;CODE OFFSET LOW + DW #0000 ;CODE OFFSET HIGH + DW #0000 ;END-BEG ;PRIMARY LOADER + DW #0000 ; + DW #0000 ;RESERVED + DW #0000 ; + DW #8100 ;LOAD ADDRESS + DW #8100 ;START ADDRESS + DW #BFFF ;STACK ADDRESS + DS 490 +BEG LD HL,MS0 + LD C,PCHARS + RST #10 + DI + + LD BC,#00CE ; Получение идентификатора блока, назначенного на RAM-Disk +NEXTRD LD A,B ; номер RAM-Disk-а 0..15 + PUSH BC + RST #08 + + POP BC + OR A + JR Z,FNDRD + INC B + LD A,B + CP #10 + JR NZ,NEXTRD + JP NORAMD +FNDRD PUSH BC + LD C,#C2 ; выделение блока ОЗУ + LD B,45 ; запрашиваемое число страниц ОЗУ (45 = 720 kb) + RST #08 + POP BC + JP C,NOMEM + PUSH AF + + LD C,A + LD A,B ; номер RAM-Disk-а 0..15 - соответствует RAM-Disk-ам от e: до t: + LD B,C ; идентификатор блока + LD C,#C9 ; назначить блок памяти RAM-Disk-у + RST #08 + + POP AF + LD C,PAGE3 + IN B,(C) + OUT (C),A + PUSH BC + LD HL,#C000 + LD DE,#C001 + LD BC,#3FFF + LD (HL),L + LDIR + + LD HL,BPB ;boot sector [512Bytes] + LD DE,#C000 + LD BC,BPBEND-BPB + LDIR + + LD HL,#AA55 + LD (#C200-2),HL + LD HL,#C200 + LD (HL),#F9 + INC L + LD (HL),#FF + INC L + LD (HL),#FF + INC L + LD (HL),#00 + + LD HL,#C200+(512*5) + LD (HL),#F9 + INC L + LD (HL),#FF + INC L + LD (HL),#FF + INC L + LD (HL),#00 + + POP BC + OUT (C),B + LD HL,MS1 + LD C,PCHARS + RST #10 + LD B,#00 +EXITT LD C,#41 + RST #10 + DI + HALT + +NORAMD LD HL,MS2 + LD C,PCHARS + RST #10 + LD B,1 + JP EXITT + +NOMEM LD HL,MS3 + LD C,PCHARS + RST #10 + LD B,1 + JP EXITT + + +; +; RAMDRIVE 720 +; RAMDRIVE E:720 +; 0 1 2 3 4 5 6 7 8 9 A B C D E F +; + +;GETPARM LD A,#FF +; LD (RDRIVE),A +; LD (RSIZE),A +; LD D,XH +; LD E,XL +; EX DE,HL +; LD E,(HL) +; INC HL +; LD D,0 +; EX DE,HL +; ADD HL,DE +; LD (HL),0 +;NEXTPRM EX DE,HL +; LD DE,BUFFER +; LD C,GSWITCH +; RST #10 +; EX DE,HL ;SAVE HL IN DE +; LD HL,BUFFER +; LD A,(HL) +; INC HL +; OR A +; RET Z +; CP "/" +; JR NZ,NOSLASH +; LD A,(HL) +; INC HL +; CALL UPPER +; CALL ATOHEX +; JP C,ILLEGAL +; LD (RDRIVE),A +; LD A,(HL) +; OR A +; JR Z,NEXTPRM +; JP ILLEGAL +; +;NOSLASH CP ":" +; JP NZ,NOSIZER +; LD IX,0 +;NDIG LD C,XL +; LD B,XH +; ADD IX,IX ;X2 +; ADD IX,IX ;X4 +; ADD IX,BC ;X5 +; ADD IX,IX ;X10 +; JP C,ILLEGAL +; LD A,(HL) +; OR A +; JR Z,ENDSZ +; CALL UPPER +; CP "K" +; JR Z,ENDSZ +; CALL ATODEC +; LD C,A +; LD B,0 +; ADD IX,BC +; JR NDIG +;ENDSZ LD A,XL +; LD C,A +; LD B,XH +; SRL B +; RR C +; SRL B +; RR C +; SRL B +; RR C +; SRL B +; RR C +; AND #0F +; JR Z,L101 +; INC BC +;L101 LD A,B +; OR A +; JP NZ,ILLEGAL +; LD A,C +; LD (RSIZE),A +; JP NEXTPRM + +;NOSIZER JP ILLEGAL + +;ATODEC CP "0" +; RET C +; CP ":" +; CCF +; RET C +; SUB "0" +; RET + +;ATOHEX CP "0" +; RET C +; CP ":" +; JR NC,TRYHEX +; SUB "0" +; AND A +; RET +;TRYHEX CALL UPPER +; CP "A" +; RET C +; CP "G" +; CCF +; RET C +; SUB "A" +; RET + +;UPPER CP "a" +; RET C +; CP "z"+1 +; RET NC +; SUB #20 +; RET + +MS0 DB "RAMDRIVE DRIVER (C) 1999 PETERS Plus ltd.",CR,LF,CR,LF,EN + +MS1 DB "RAM DISK created",CR,LF,EN + +MS2 DB "No free RAM-DISK",CR,LF,EN + +MS3 DB "No free memory, for create RAM-DISK",CR,LF,EN + +MS4 DB "Illegal parametr",CR,LF,EN + +MS5 DB "Usage : RAMDRIVE [/drive 0...F] [:size]",CR,LF,EN + +; Area for boot sector [512Bytes] +BPB DB #EB,#3C,#90 ; +00 JMP + DB "DOS_X.XX" ; +03 DOS NAME + +; Block Parameters BIOS + + DW #0200 ; +0B BYTE PER SECTOR + DB 1 ; +0D SECTORS PER CLUSTER + DW 1 ; +0E RESERVE SECTORS + DB 2 ; 1 ; +10 AMOUNT FATS + DW 112 ; +11 FILES IN DIRECTORY + DW 1440 ; +13 ALL SECTORS ON DISK + DB #FA ; +15 ID FORMAT + DW 5 ; +16 SIZE FAT IN SECTORS + DW 9 ; +18 SECTOR PER TRACK + DW 2 ; +1A AMOUNT SIDES + DW 0,0 ; +1C HIDDEN SECTORS + DW 0,0 ; +20 ALL SECTORS BIG + DW #0080 ; +24 PHISICAL DRIVE NUMBER + DB #29 ; +26 EXTENDED RECORD SIGNATURE + DW #104B,#D765 ; +27 SERIAL VOLUME NUMBER + DB "NO NAME " ; +2B DISK LABEL + DB "FAT12" ; +36 FAT ID +BPBEND +; DEFS 453,0 +; end boot sector diff --git a/Shared_Includes b/Shared_Includes new file mode 160000 index 0000000..6e27011 --- /dev/null +++ b/Shared_Includes @@ -0,0 +1 @@ +Subproject commit 6e27011b6259b0256ce65d91a53ef1185223eafa