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

487
MAP.ASM
View File

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

View File

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

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