RAM-Drive/RAMDRIVE.ASM
Anatoliy Belyanskiy 1b26eb4cfc Refactoring
2023-06-15 17:30:11 +10:00

265 lines
4.5 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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