Правильная генерация 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

487
MAP.ASM
View File

@ -57,170 +57,223 @@ count: db 5
; <20> áâனª  ®ª­  ¯à®æ¥áá  ä®à¬ â¨à®¢ ­¨ï
Setup_Map:
xor a
ld (_OS),a
ld hl,553
ld (L0BB6+1),hl
ld hl,512
ld (MinusSc+1),hl
ld a,2
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
jr .loc3
.loc2: ld a," " ; § ¯®«­¨âì ®áâ â®ª "LABEL" ¯à®¡¥«®¬
ld (de),a
inc de
djnz .loc2
.loc3: ld hl,(CurElem1) ; ⥪. ¯®«®¦. 㪠§ â¥«ï ä®à¬ â 
ld a,h
add a,l
call Space
call SetCyl
call SetMedia
push af
cp 3
jr z,.loc4
cp 4
jr z,.loc4
cp 6
jr z,.loc4
cp 7
jr z,.loc4
cp 10
jr z,.loc4
cp 11
jr z,.loc4
; 80 ¤®à®¦¥ª
ld a,0FFh
ld (metka1),a
ld (metka2),a
ld (metka4),a
ld (metka3),a
jr .loc5
; 82-83 ¤®à®¦ª¨
.loc4: ld a,"Û"
ld (metka1),a
ld (metka2),a
ld a," "
ld (metka4),a
ld a,"0"
ld (metka3),a
.loc5: pop af
rlca
ld e,a
ld d,0
ld hl,.loc6
ld bc,7
add hl,de
ld e,(hl)
inc hl
ld d,(hl)
ex de,hl
ld de,metka5
ldir
;
ld a,(_OS)
or a
jr z,.loc30 ; ®á ms-dos
dec a
jr nz,.loc28 ; ®á cpm-80
ld a,(sFlag1)
or a
jr nz,.loc28 ; ®è¨¡ª¨ à ¡®âë á ä ©«®¬ "boot.$b"
ld a,(cSystem)
or a
jr z,.loc28
ld hl,.loc53 ; tr-dos "Boot disk "
jr .loc27
; ms-dos
.loc30: ld hl,.loc25 ; "System files"
ld a,(sFlag)
or a
jr nz,.loc28 ; ®è¨¡ª¨ à ¡®âë á á¨áâ. ä ©« ¬¨ Estex
ld a,(cSystem)
or a
jr nz,.loc27
.loc28: ld hl,.loc26 ; " "
.loc27: ld de,metka7
ld bc,12
ldir
; ­ áâநâì áâபã ⥪. ०¨¬ 
ld hl,(CurElem1) ; ⥪. ¯®«®¦. 㪠§ â¥«ï ä®à¬ â 
ld a,h
add a,l
ld hl,.loc52 ; " "
cp 13 ; ¯ã­ªâ CPM-80 ?
jr z,.loc21
; ms-dos, tr-dos
ld hl,.loc29 ; "Optimize sectors"
ld a,(Mode2)
or a
jr nz,.loc21
ld hl,.loc19 ; "Standart mode"
ld a,(Mode0)
or a
jr nz,.loc21
ld hl,.loc20 ; "Quick format"
.loc21: ld bc,18
ld de,metka6 ; áâப  ¢ ListBox-¥
ldir
ret
;
.loc6: dw .loc7
dw .loc8
dw .loc9
dw .loc10
dw .loc11
dw .loc12
dw .loc13
dw .loc14
dw .loc15
dw .loc16
dw .loc17
dw .loc18
dw .loc50
dw .loc51
;
.loc7: db "1.44 Mb"
.loc8: db "1.52 Mb"
.loc9: db "1.60 Mb"
.loc10: db "1.64 Mb"
.loc11: db "1.66 Mb"
.loc12: db "1.68 Mb"
.loc13: db "1.72 Mb"
.loc14: db "1.74 Mb"
.loc15: db "720 kB "
.loc16: db "800 kB "
.loc17: db "820 kB "
.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) "
.loc52: db " "
.loc22: db "NO NAME "
.loc25: db "System files"
.loc53: db "Boot disk "
.loc26: db " "
Setup_Map: xor a
ld (_OS),a
ld hl,553
ld (L0BB6+1),hl
ld hl,512
ld (MinusSc+1),hl
ld a,2
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
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
;
.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
call Space
call SetCyl
call SetMedia
push af
cp 3
jr z,.loc4
cp 4
jr z,.loc4
cp 6
jr z,.loc4
cp 7
jr z,.loc4
cp 10
jr z,.loc4
cp 11
jr z,.loc4
; 80 ¤®à®¦¥ª
ld a,0FFh
ld (metka1),a
ld (metka2),a
ld (metka4),a
ld (metka3),a
jr .loc5
; 82-83 ¤®à®¦ª¨
.loc4: ld a,"Û"
ld (metka1),a
ld (metka2),a
ld a," "
ld (metka4),a
ld a,"0"
ld (metka3),a
.loc5: pop af
rlca
ld e,a
ld d,0
ld hl,.loc6
ld bc,7
add hl,de
ld e,(hl)
inc hl
ld d,(hl)
ex de,hl
ld de,metka5
ldir
;
ld a,(_OS)
or a
jr z,.loc30 ; ®á ms-dos
dec a
jr nz,.loc28 ; ®á cpm-80
ld a,(sFlag1)
or a
jr nz,.loc28 ; ®è¨¡ª¨ à ¡®âë á ä ©«®¬ "boot.$b"
ld a,(cSystem)
or a
jr z,.loc28
ld hl,.loc53 ; tr-dos "Boot disk "
jr .loc27
; ms-dos
.loc30: ld hl,.loc25 ; "System files"
ld a,(sFlag)
or a
jr nz,.loc28 ; ®è¨¡ª¨ à ¡®âë á á¨áâ. ä ©« ¬¨ Estex
ld a,(cSystem)
or a
jr nz,.loc27
.loc28: ld hl,.loc26 ; " "
.loc27: ld de,metka7
ld bc,12
ldir
; ­ áâநâì áâபã ⥪. ०¨¬ 
ld hl,(CurElem1) ; ⥪. ¯®«®¦. 㪠§ â¥«ï ä®à¬ â 
ld a,h
add a,l
ld hl,.loc52 ; " "
cp 13 ; ¯ã­ªâ CPM-80 ?
jr z,.loc21
; ms-dos, tr-dos
ld hl,.loc29 ; "Optimize sectors"
ld a,(Mode2)
or a
jr nz,.loc21
ld hl,.loc19 ; "Standart mode"
ld a,(Mode0)
or a
jr nz,.loc21
ld hl,.loc20 ; "Quick format"
.loc21: ld bc,18
ld de,metka6 ; áâப  ¢ ListBox-¥
ldir
ret
;
.loc6: dw .loc7
dw .loc8
dw .loc9
dw .loc10
dw .loc11
dw .loc12
dw .loc13
dw .loc14
dw .loc15
dw .loc16
dw .loc17
dw .loc18
dw .loc50
dw .loc51
;
.loc7: db "1.44 Mb"
.loc8: db "1.52 Mb"
.loc9: db "1.60 Mb"
.loc10: db "1.64 Mb"
.loc11: db "1.66 Mb"
.loc12: db "1.68 Mb"
.loc13: db "1.72 Mb"
.loc14: db "1.74 Mb"
.loc15: db "720 kB "
.loc16: db "800 kB "
.loc17: db "820 kB "
.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) "
.loc52: db " "
.loc22: db "NO NAME "
.loc25: db "System files"
.loc53: db "Boot disk "
.loc26: db " "
@ -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

View File

@ -804,29 +804,29 @@ EImouse: LD E,(HL) ;Xcoord
INC HL
LD D,(HL) ;Ycoord
LD A,D
CP (IX+4) ;Y pos input line
CP (IX+4) ;Y pos input line
RET NZ
LD A,E
BIT 7,(IX+2)
JR NZ,$+6
CP (IX+2) ;Xo pos
CP (IX+2) ;Xo pos
RET C
BIT 7,(IX+3)
RET NZ
CP (IX+3) ;Xi pos
CP (IX+3) ;Xi pos
RET NC
BIT 7,(IX+1)
JR Z,SetInLn
BIT 7,(IX+6)
JR NZ,$+6
CP (IX+6) ;Xo inp.line
CP (IX+6) ;Xo inp.line
RET C
SUB (IX+6) ;shift from begin
SUB (IX+6) ;shift from begin
LD C,A
LD L,(IX+9)
LD H,(IX+0Ah)
INC HL
LD (HL),0 ;Flag
LD (HL),0 ;Flag
INC HL
CP (HL)
RET Z

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