Правильная генерация FAT_SERIAL_NUMBER

Создание метки диска в BPB
Запись системных файлов на FAT12 с помощью вызова SYS
This commit is contained in:
Tolik 2025-05-24 00:58:42 +10:00
parent dc587dda99
commit a1ab539980
7 changed files with 303 additions and 276 deletions

View File

@ -252,7 +252,7 @@ WriteSysFiles: ld a,(sFlag)
ld (sFlag),a
ret
.sys_name: db "SYS.EXE "
.sys_prm_disk: db "A: 1"
.sys_prm_disk: dz "A: 1"
; SetDisketa: ; “áâ. ⥪ã騩 ¤¨áª ­  ä®à¬ â. ¤¨áª¥âã

View File

@ -136,7 +136,8 @@ NoMouse: db "Driver mouse not installed",0Dh,0Ah,0
Title: db " Floppy disk formatting utility. Version "
db major_version + "0","."
db (minor_version / 10) + "0",(minor_version % 10) + "0"
db " (c) 2005-2025 "
;db " (c) 2005-2025 "
db " (c) 2005-2025 Sprinter Team "
;
;ds 562 ; 565 + start2 = 672 (_2 -_1)
;[]==============================================================[]

View File

@ -1093,13 +1093,6 @@ L09A8: ld de,L2400 ;
ld hl,MS_Boot ; ms-dos boot-ᥪâ®à
ld bc,MS_Boot.SIZE ; ¤«¨­  boot- 
ldir ;!TEST
assert MS_Boot.SIZE < 512,"DEL ME!!!"
ld bc,512-MS_Boot.SIZE
ld h,d
ld l,e
dec hl
ldir
;
ex de,hl ; hl = ­ ç «® FAT ¢ ¡ãä¥à¥
loc07: ld bc,16896 ; 6656/16896 ¤«¨­  FAT-®¢ + Root dir
ld e,0 ; ¡ ©â § ¯®«­¥­¨ï
@ -1530,68 +1523,8 @@ MS_Boot:
.serial: dw 0000,0000 ; á¥à¨©­ë© ­®¬¥à ¤¨áª¥âë 2D3A:96C2
.label: db "NO NAME " ; 11 ¡ ©â, ¬¥âª  ¤¨áª¥âë
db "FAT12 " ; 8 ¡ ©â, ID ä ©«®¢®© á¨á⥬ë
;--------------;
/*
db 0xFA,0x33,0xD2,0x8E,0xD2,0xBC,0xF0,0x7B
db 0xFB,0xB8,0xC0,0x07,0x8E,0xD8,0xE8,0x89
db 0x00,0xBE,0xFE,0x00,0xFC,0xBB,0x70,0x00
db 0xE8,0x25,0x00,0x32,0xE4,0xCD,0x16,0x3C
db 0x1B,0x74,0x18,0x3C,0x0D,0x74,0x08,0x3C
db 0x20,0x74,0x04,0x3C,0x6F,0x75,0xEC,0xBE
db 0xDF,0x01,0xE8,0x0B,0x00,0xBE,0xC1,0x01
db 0xE8,0x05,0x00,0xE8,0x5C,0x00,0xCD,0x19
db 0xAC,0x0A,0xC0,0x74,0x46,0x3C,0x01,0x75
db 0x05,0xAC,0x8A,0xD8,0xEB,0xF2,0x3C,0x02
db 0x75,0x0A,0xAD,0x8B,0xD0,0x56,0xE8,0x62
db 0x00,0x5E,0xEB,0xE4,0x3C,0x03,0x75,0x0A
db 0xAC,0xA2,0x00,0x00,0x89,0x36,0x01,0x00
db 0xEB,0xD6,0x3C,0x04,0x75,0x0C,0xFE,0x0E
db 0x00,0x00,0x74,0x04,0x8B,0x36,0x01,0x00
db 0xEB,0xC6,0x33,0xC9,0xA8,0x80,0x74,0x05
db 0x24,0x7F,0x8A,0xC8,0xAC,0x41,0xE8,0x17
db 0x00,0xEB,0xB5,0x36,0xA1,0x6C,0x04,0x05
db 0x04,0x00,0x36,0x39,0x06,0x6C,0x04,0x72
db 0xF9,0xC3,0xB8,0x03,0x00,0xCD,0x10,0xC3
db 0x56,0x3C,0x0A,0x74,0x10,0xB4,0x09,0xCD
db 0x10,0x02,0xD1,0x80,0xFA,0x50,0x73,0x05
db 0xE8,0x08,0x00,0x5E,0xC3,0xFE,0xC6,0x32
db 0xD2,0xEB,0xF5,0xB4,0x02,0xCD,0x10,0xC3
; 21 ¡ ©â
db " FFORMAT Version "
db major_version + "0","."
db (minor_version / 10) + "0",(minor_version % 10) + "0"
;
db 0xBA,0x20,0x01,0x1F,0x03,0x07,0xCF,0xB0
db 0x04,0x91,0xB0,0x01,0x4E,0x80,0xC9,0xA7
db 0xCD,0x80,0xBB,0x01,0x1F,0x93,0xB0,0x03
db 0x06,0x91,0xB0,0x01,0x4E,0x80,0xBA,0xA7
db 0x20,0x80,0xBA,0x01,0x07,0x81,0xB0,0x01
db 0x1F,0x91,0xB0,0x04,0x91,0xB0,0x01,0x4E
db 0x80,0xC8,0xA7,0xCD,0x80,0xBC,0x01,0x07
db 0x81,0xB0,0x01,0x1F,0x91,0xB0,0x93,0xB0
db 0x01,0x07,0xA9,0xB0,0x01,0x1F,0x91,0xB0
db 0x03,0x07,0xCF,0xB0,0x04,0x01,0x70
; 16 ¡ ©â
db " RLE Boot record"
db 0xC6,0x20,0x01,0x4F,0x02,0x15,0x0A
; 36 ¡ ©â
db "Sorry, but this disk is not bootable"
db 0x02,0x16,0x0B
; 33 ¡ ©â 
db "Insert SYSTEM disk into the drive"
db 0x01,0x7F,0x02,0x22,0x0D
; ­¥ ­ ¦ âë© ¡ãâ®­
db "",82h,20h,01h,7Ch,"O",01h,7Fh,"k",82h,20h,""
db 0x01,0x40,0x80,0xDC,0x02,0x23,0x0E,0x89
db 0xDF,0x02,0x00,0x19,0x00,0x01,0x4E,0x02
db 0x22,0x0D,0x20,0x01,0x7F
; ­ ¦ âë© ¡ãâ®­
db "",82h,20h,01h,7Ch,"O",01h,7Fh,"k",82h,20h,""
db 0x01,0x4E,0x02,0x23,0x0E,0x89,0x20,0x02
db 0x00,0x19,0x00
dw 0xAA55
*/
DB 0
block 510-62,0
dw #AA55
.SIZE EQU $-MS_Boot

View File

@ -55,7 +55,7 @@ dss_ver_ok: ;
ld hl,no_mem_err
jr Start.error_exit
;
.mem_ok: ld (SLOT1),a
.mem_ok: out (SLOT1),a
LD HL,#6200 ;!HARDCODE
LD BC,Dss.AppInfo.EXE_HomeDir
RST ToDSS

189
MAP.ASM
View File

@ -57,8 +57,7 @@ count: db 5
; <20> áâனª  ®ª­  ¯à®æ¥áá  ä®à¬ â¨à®¢ ­¨ï
Setup_Map:
xor a
Setup_Map: xor a
ld (_OS),a
ld hl,553
ld (L0BB6+1),hl
@ -68,25 +67,80 @@ Setup_Map:
ld (SecCode+1),a ; ª®¤ à §¬¥à  ᥪâ®à 
ld hl,INTERL1
ld (INTERL+1),hl ; ãáâ. ¨­â¥à«¨¢ ¤«ï < 21 ᥪâ®à 
;
;
ld hl,LABEL ; ¡ãä¥à ¨¬¥­¨ ¬¥âª¨
ld a,(hl)
or a
jr nz,.loc0
;
ld hl,.loc22 ; "NO NAME "
.loc0: ld de,LABEL1
ld b,11
.loc1: ld a,(hl)
or a
jr z,.loc2
ld (de),a
inc hl
inc de
djnz .loc1
LD A,(HL)
CP ' '+1
JR C,.no_name
;
.loop1: LD A,(HL)
AND A
jr z,.empty
CP '*'
JR Z,.no_name
CP '.'
JR Z,.no_name
CP '"'
JR Z,.no_name
CP '+'
JR Z,.no_name
CP ','
JR Z,.no_name
CP '/'
JR Z,.no_name
CP ':'
JR Z,.no_name
CP ';'
JR Z,.no_name
CP '<'
JR Z,.no_name
CP '='
JR Z,.no_name
CP '>'
JR Z,.no_name
CP '['
JR Z,.no_name
CP '\'
JR Z,.no_name
CP ']'
JR Z,.no_name
CP '|'
JR Z,.no_name
LD (DE),A
INC HL
INC DE
DJNZ .loop1
jr .loc3
.loc2: ld a," " ; § ¯®«­¨âì ®áâ â®ª "LABEL" ¯à®¡¥«®¬
ld (de),a
inc de
djnz .loc2
;
.empty: ld a,b
cp 11
jr z,.no_name
;
ex de,hl
.loop2: ld (hl)," "
inc hl
djnz .loop2
jr .loc3
;
.no_name: ld hl,.loc22
ld de,LABEL1
ld bc,11
push hl
ldir
pop hl
ld de,LABEL
ld c,11
ldir
;
;
.loc3: ld hl,(CurElem1) ; ⥪. ¯®«®¦. 㪠§ â¥«ï ä®à¬ â 
ld a,h
add a,l
@ -211,8 +265,7 @@ Setup_Map:
.loc18: db "830 kB "
.loc50: db "TR-DOS "
.loc51: db "CP/M-80"
;
.loc19: db "(Standart mode) "
.loc29: db "(Optimize sectors)"
.loc20: db "(Quick format) "
@ -843,33 +896,75 @@ CreateLabel:
; ld c,12h
; RST ToDSS
; .loc1: jp RestPath ; ¢®ááâ. ¤¨áª ¨ ¯ãâì
ld hl,LABEL
ld de,L2400 + BOOT_SECTOR.FAT.LABEL ;!TEST
ld b,11
;
.loop: ld a,(hl)
and a
jr z,.empty
ld (de),a
inc de
inc hl
djnz .loop
ret
;
.empty: ld a,b
cp 11
jr z,.no_name
;
ex de,hl
.loop2: ld (hl)," "
inc hl
djnz .loop2
ret
.no_name:
ld hl,MS_Boot.label
ld bc,11
ldir
ret
; ><|?*/\:"
ld hl,LABEL1
ld de,L2400 + BOOT_SECTOR.FAT.LABEL
LD BC,11 ; áç¥â稪
LDIR
RET
; ;
; LD A,(HL)
; CP ' '+1
; JR C,.no_name
; .loop1: LD A,(HL)
; AND A
; jr z,.empty
; CP '*'
; JR Z,.no_name
; CP '.'
; JR Z,.no_name
; CP '"'
; JR Z,.no_name
; CP '+'
; JR Z,.no_name
; CP ','
; JR Z,.no_name
; CP '/'
; JR Z,.no_name
; CP ':'
; JR Z,.no_name
; CP ';'
; JR Z,.no_name
; CP '<'
; JR Z,.no_name
; CP '='
; JR Z,.no_name
; CP '>'
; JR Z,.no_name
; CP '['
; JR Z,.no_name
; CP '\'
; JR Z,.no_name
; CP ']'
; JR Z,.no_name
; CP '|'
; JR Z,.no_name
; LD (DE),A
; INC HL
; INC DE
; DJNZ .loop1
; RET
; ;
; .empty: ld a,b
; cp 11
; jr z,.no_name
; ;
; ex de,hl
; .loop2: ld (hl)," "
; inc hl
; djnz .loop2
; ret
; ;
; .no_name: ld hl,Setup_Map.loc22
; ld de,L2400 + BOOT_SECTOR.FAT.LABEL
; ld bc,11
; push hl
; ldir
; pop hl
; ld de,LABEL
; ld c,11
; ldir
; ret
; ‚ë室­ë¥ §­ ç¥­¨ï:
; D - ¤¥­ì
@ -886,9 +981,7 @@ CreateSerialNumber:
;
ex de,hl
add ix,de
ld a,xl
ld (L2400 + BOOT_SECTOR.FAT.SERIAL_NUMBER + 3),a
ld (L2400 + BOOT_SECTOR.FAT.SERIAL_NUMBER + 1),ix
ld (L2400 + BOOT_SECTOR.FAT.SERIAL_NUMBER + 2),ix
;
ld a,d
ld d,b
@ -902,8 +995,8 @@ CreateSerialNumber:
;
ld e,a
add hl,de
ld e,l
ld l,h
ld h,e
; ld e,l
; ld l,h
; ld h,e
ld (L2400 + BOOT_SECTOR.FAT.SERIAL_NUMBER),hl
ret

@ -1 +1 @@
Subproject commit 1b6a539aea8d46b09a617a90a04a2e45dcb37b3f
Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1