Правильная генерация 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 ld (sFlag),a
ret ret
.sys_name: db "SYS.EXE " .sys_name: db "SYS.EXE "
.sys_prm_disk: db "A: 1" .sys_prm_disk: dz "A: 1"
; SetDisketa: ; “áâ. ⥪ã騩 ¤¨áª ­  ä®à¬ â. ¤¨áª¥âã ; SetDisketa: ; “áâ. ⥪ã騩 ¤¨áª ­  ä®à¬ â. ¤¨áª¥âã

View File

@ -136,7 +136,8 @@ NoMouse: db "Driver mouse not installed",0Dh,0Ah,0
Title: db " Floppy disk formatting utility. Version " Title: db " Floppy disk formatting utility. Version "
db major_version + "0","." db major_version + "0","."
db (minor_version / 10) + "0",(minor_version % 10) + "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) ;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 hl,MS_Boot ; ms-dos boot-ᥪâ®à
ld bc,MS_Boot.SIZE ; ¤«¨­  boot-  ld bc,MS_Boot.SIZE ; ¤«¨­  boot- 
ldir ;!TEST 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 ¢ ¡ãä¥à¥ ex de,hl ; hl = ­ ç «® FAT ¢ ¡ãä¥à¥
loc07: ld bc,16896 ; 6656/16896 ¤«¨­  FAT-®¢ + Root dir loc07: ld bc,16896 ; 6656/16896 ¤«¨­  FAT-®¢ + Root dir
ld e,0 ; ¡ ©â § ¯®«­¥­¨ï ld e,0 ; ¡ ©â § ¯®«­¥­¨ï
@ -1530,68 +1523,8 @@ MS_Boot:
.serial: dw 0000,0000 ; á¥à¨©­ë© ­®¬¥à ¤¨áª¥âë 2D3A:96C2 .serial: dw 0000,0000 ; á¥à¨©­ë© ­®¬¥à ¤¨áª¥âë 2D3A:96C2
.label: db "NO NAME " ; 11 ¡ ©â, ¬¥âª  ¤¨áª¥âë .label: db "NO NAME " ; 11 ¡ ©â, ¬¥âª  ¤¨áª¥âë
db "FAT12 " ; 8 ¡ ©â, ID ä ©«®¢®© á¨á⥬ë db "FAT12 " ; 8 ¡ ©â, ID ä ©«®¢®© á¨á⥬ë
;--------------; block 510-62,0
/* dw #AA55
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
.SIZE EQU $-MS_Boot .SIZE EQU $-MS_Boot

View File

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

189
MAP.ASM
View File

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

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