mirror of
https://github.com/Tolik-Trek/RAM-Drive.git
synced 2026-06-15 09:21:33 +03:00
261 lines
3.7 KiB
NASM
261 lines
3.7 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
|
|
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
|