mirror of
https://github.com/Tolik-Trek/RAM-Drive.git
synced 2026-06-15 01:11:32 +03:00
265 lines
4.5 KiB
NASM
265 lines
4.5 KiB
NASM
|
||
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 ; <20>®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª , § 祮£® 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
|