RAM-Drive/Original/RAMDRIVE.ASM
Anatoliy Belyanskiy 8037fd59ce Setup
2023-06-15 17:23:24 +10:00

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