mirror of
https://github.com/Tolik-Trek/FORMAT.git
synced 2026-06-15 09:21:40 +03:00
1. Правильная генерация серийного номера по доке от M$
2. Исправление максимального размера раздела для FAT 16 3. Мелкие правки
This commit is contained in:
parent
eceb6093d1
commit
6e9ce03009
@ -1 +1 @@
|
|||||||
Subproject commit 64c3057bcecb671ebc5dd593a54c2ab1836222da
|
Subproject commit a26f6ad2cf2eab977cab8baa0c83b0c2a91a5e53
|
||||||
16
format/build.inc
Executable file
16
format/build.inc
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
BUILD_COUNT EQU 103
|
||||||
|
define BUILD_COUNT_T "103"
|
||||||
|
|
||||||
|
BUILD_DAY EQU 22
|
||||||
|
define BUILD_DAY_T "24"
|
||||||
|
|
||||||
|
BUILD_MONTH EQU 01
|
||||||
|
define BUILD_MONTH_T "01"
|
||||||
|
|
||||||
|
BUILD_YEAR EQU 2026
|
||||||
|
define BUILD_YEAR_T "2026"
|
||||||
|
|
||||||
|
define BUILD_DATE_T "22.01.26"
|
||||||
|
define BUILD_DATE_NS_T "220126"
|
||||||
|
|
||||||
|
define BUILD_TIME_T "22:41"
|
||||||
1
format/build.txt
Executable file
1
format/build.txt
Executable file
@ -0,0 +1 @@
|
|||||||
|
100
|
||||||
148
format/console.asm
Executable file
148
format/console.asm
Executable file
@ -0,0 +1,148 @@
|
|||||||
|
;Color settings
|
||||||
|
col_blue = 1
|
||||||
|
col_green = 2
|
||||||
|
col_violet = 3
|
||||||
|
col_red = 4
|
||||||
|
col_magenta = 5
|
||||||
|
col_brown = 6
|
||||||
|
col_white = 7
|
||||||
|
|
||||||
|
col_yellow = 10
|
||||||
|
col_white_light = 15
|
||||||
|
|
||||||
|
col_cmd = 16
|
||||||
|
IFUSED ClearScr
|
||||||
|
ClearScr: ld bc,0x0756 ;c = ESTEX_clearscr
|
||||||
|
ld de,0
|
||||||
|
ld hl,0x2050
|
||||||
|
ld a,space
|
||||||
|
rst 0x10
|
||||||
|
ld de,0
|
||||||
|
SYS ESTEX_setcursor
|
||||||
|
ld de,0
|
||||||
|
ld (coords),DE
|
||||||
|
ret
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
IFUSED winClearScr
|
||||||
|
;<3B>ந§¢®¤¨â ®âç¨áâªã ¢ë¡à ®© ®¡« á⨠⥪á⮢®£® íªà (ª®á®«¨).
|
||||||
|
;in:
|
||||||
|
; HL = ¢ëá®â , è¨à¨
|
||||||
|
; DE = Y,X
|
||||||
|
; BC = new cursor position (Y,X)
|
||||||
|
winClearScr: push bc
|
||||||
|
ld a,space
|
||||||
|
ld b,7
|
||||||
|
SYS ESTEX_clearscr
|
||||||
|
pop de
|
||||||
|
ld (coords),de
|
||||||
|
SYS ESTEX_setcursor
|
||||||
|
ret
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
; IFUSED ScrBackup
|
||||||
|
;in:
|
||||||
|
;IX = buf addr
|
||||||
|
;ScrBackup: ld de,0 ;XY 0,0
|
||||||
|
; ld hl,0x2050 ;h,w: 32x80
|
||||||
|
; ex af,af
|
||||||
|
; in a,(mmu3)
|
||||||
|
; ex af,af
|
||||||
|
; SYS ESTEX_scrwincopy
|
||||||
|
; ret
|
||||||
|
; ENDIF
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; IFUSED ScrRestore
|
||||||
|
;;in:
|
||||||
|
;;IX = buf addr
|
||||||
|
;ScrRestore: ld de,0 ;XY 0,0
|
||||||
|
; ld hl,0x2050 ;h,w: 32x80
|
||||||
|
; ex af,af
|
||||||
|
; in a,(mmu3)
|
||||||
|
; ex af,af
|
||||||
|
; SYS ESTEX_scrwinrest
|
||||||
|
|
||||||
|
IFUSED GetXY
|
||||||
|
GetXY: SYS ESTEX_getcursor
|
||||||
|
ld (coords),de
|
||||||
|
ret
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IFUSED SetXY
|
||||||
|
SetXY: ld de,(coords)
|
||||||
|
SYS ESTEX_setcursor
|
||||||
|
ret
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IFUSED Check_Vmode
|
||||||
|
;check for enabled TextMode
|
||||||
|
Check_Vmode: SYS ESTEX_getvmode
|
||||||
|
jr c,getvmodeErr
|
||||||
|
.next0: ld (vmode),a ;current vmode
|
||||||
|
ex af,af
|
||||||
|
ld a,b
|
||||||
|
ld (vmode.screen),a ;screen (0 or 1)
|
||||||
|
ex af,af
|
||||||
|
cp _VMODE._T80 ;text 80x32 mode?
|
||||||
|
jr nz,.set_t80_mode ;if no, then set it
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.set_t80_mode: ld a,_VMODE._T80
|
||||||
|
ld b,0
|
||||||
|
SYS ESTEX_setvmode
|
||||||
|
jp c,setvmodeErr
|
||||||
|
ret
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
IFUSED Return_Vmode
|
||||||
|
Return_Vmode: ld a,(vmode)
|
||||||
|
cp _VMODE._T80
|
||||||
|
ret z
|
||||||
|
ex af,af
|
||||||
|
ld a,(vmode.screen)
|
||||||
|
ld b,a
|
||||||
|
ex af,af
|
||||||
|
SYS ESTEX_setvmode
|
||||||
|
jp c,setvmodeErr
|
||||||
|
ret
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
IFUSED getvmodeErr
|
||||||
|
getvmodeErr: PrintChars errGetvmodeMsg
|
||||||
|
ld b,-1
|
||||||
|
jp quit0
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
IFUSED setvmodeErr
|
||||||
|
setvmodeErr: PrintChars errSetvmodeMsg
|
||||||
|
ld b,-20
|
||||||
|
jp quit0
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IFUSED vmode
|
||||||
|
vmode: db 0
|
||||||
|
.screen: db 0
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
;-------------------------------------------------------------
|
||||||
|
IFUSED errGetvmodeMsg
|
||||||
|
errGetvmodeMsg: db cr,lf
|
||||||
|
db "ERROR: Failed to get video mode!",cr,lf
|
||||||
|
db cr,lf,0
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
IFUSED errSetvmodeMsg
|
||||||
|
errSetvmodeMsg: db cr,lf
|
||||||
|
db "ERROR: Failed to set video mode!",cr,lf
|
||||||
|
db cr,lf,0
|
||||||
|
ENDIF
|
||||||
|
;-------------------------------------------------------------
|
||||||
848
format/format.asm
Executable file
848
format/format.asm
Executable file
@ -0,0 +1,848 @@
|
|||||||
|
;ÚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¿
|
||||||
|
;³ FORMAT - Disk Format Utility for Sprinter ³
|
||||||
|
;³ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ³
|
||||||
|
;³ by Sayman 2021 ³
|
||||||
|
;ÀÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÙ
|
||||||
|
DEVICE ZXSPECTRUM128
|
||||||
|
|
||||||
|
Start_addr = 0x8100
|
||||||
|
INCLUDE "include/estex_h.asm"
|
||||||
|
INCLUDE "include/head_short.inc"
|
||||||
|
INCLUDE "include/macro.s"
|
||||||
|
INCLUDE "build.inc"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LoaderStart: JP main
|
||||||
|
;===================================================
|
||||||
|
INCLUDE "console.asm"
|
||||||
|
INCLUDE "printf.asm"
|
||||||
|
INCLUDE "muldiv.asm"
|
||||||
|
;===================================================
|
||||||
|
|
||||||
|
;[]=========================================================================[]
|
||||||
|
;[] Converting latin symbols a...z to upper registry []
|
||||||
|
;[] IN: A - symbol for convert []
|
||||||
|
;[] OUT: A - converted symbol []
|
||||||
|
;[]=========================================================================[]
|
||||||
|
CapsLetter: CP "a" ;<"a"
|
||||||
|
JR C,.not_lat
|
||||||
|
CP "z"+1 ;>"z"
|
||||||
|
JR NC,.not_lat
|
||||||
|
AND %11011111 ;set D5 for upper registry
|
||||||
|
RET
|
||||||
|
|
||||||
|
.not_lat: AND A
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
;===================================================
|
||||||
|
main: DI
|
||||||
|
PUSH IX
|
||||||
|
LD A,(ix-3)
|
||||||
|
SYS ESTEX_fclose
|
||||||
|
CALL Check_Vmode ;check text mode and (if not) set it
|
||||||
|
CALL GetXY
|
||||||
|
|
||||||
|
LD DE,about_Msg.ptr
|
||||||
|
CALL cPrint
|
||||||
|
|
||||||
|
POP HL
|
||||||
|
CALL ParseCL
|
||||||
|
|
||||||
|
CALL confirmation
|
||||||
|
LD DE,Process_Msg.ptr
|
||||||
|
CALL cPrint
|
||||||
|
CALL prepare
|
||||||
|
JR NC,.ok_drive
|
||||||
|
;
|
||||||
|
LD A,"\a" ; bell
|
||||||
|
SYS ESTEX_pchar
|
||||||
|
LD DE,ProcessErr_Msg.ptr
|
||||||
|
CALL cPrint
|
||||||
|
LD B,#0D ;.UNKNOWN_FORMAT
|
||||||
|
JP quit0
|
||||||
|
;
|
||||||
|
.ok_drive: CALL calc_bpb
|
||||||
|
CALL gen_serial
|
||||||
|
|
||||||
|
LD BC,0x0105 ;read 1 sector
|
||||||
|
LD HL,0
|
||||||
|
LD IX,0
|
||||||
|
LD A,(FMTDISK)
|
||||||
|
LD DE,buff
|
||||||
|
RST 0x18 ;get start sector via read (drv)
|
||||||
|
LD D,IXH ;this function return next sector
|
||||||
|
LD E,IXL
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,.next0
|
||||||
|
DEC HL
|
||||||
|
.next0: DEC DE ;and correct it (-1)
|
||||||
|
LD (BPB.hide_sectors+2),HL ;!FIXIT çñ ¯à®¨á室¨â?
|
||||||
|
LD (BPB.hide_sectors),DE
|
||||||
|
LD HL,buff
|
||||||
|
PUSH HL
|
||||||
|
LD DE,buff+1
|
||||||
|
LD BC,512
|
||||||
|
XOR A
|
||||||
|
LD (HL),A
|
||||||
|
LDIR
|
||||||
|
|
||||||
|
SYS ESTEX_getver
|
||||||
|
PUSH DE
|
||||||
|
LD A,D
|
||||||
|
LD DE,BPB.OEM+4
|
||||||
|
CALL ConvNumTxt8
|
||||||
|
POP DE
|
||||||
|
LD A,E
|
||||||
|
LD DE,BPB.OEM+6
|
||||||
|
CALL ConvNumTxt8
|
||||||
|
|
||||||
|
;write boot sector, init first FAT sector, write it
|
||||||
|
;clear buff (zeroed), write other FAT sectors
|
||||||
|
;repeat for FAT copy
|
||||||
|
;write zeroed ROOT directory
|
||||||
|
LD IX,0
|
||||||
|
LD HL,0 ;boot sector
|
||||||
|
LD A,(FMTDISK)
|
||||||
|
LD BC,0x0106 ;save boot sector
|
||||||
|
LD DE,BPB
|
||||||
|
RST 0x18
|
||||||
|
|
||||||
|
CALL init_fat
|
||||||
|
LD IX,(BPB.reserved_secs)
|
||||||
|
LD HL,0
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
CALL wr_fat0 ;write first sector of FAT
|
||||||
|
CALL clear_buff
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
INC IX ;next FAT sector
|
||||||
|
CALL wr_fat1 ;write other FAT sectors
|
||||||
|
CALL init_fat
|
||||||
|
LD IX,(BPB.reserved_secs) ;low bits
|
||||||
|
LD DE,(BPB.fat_sectors)
|
||||||
|
ADD IX,DE
|
||||||
|
LD HL,0
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
CALL wr_fat0
|
||||||
|
CALL clear_buff
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
INC IX
|
||||||
|
CALL wr_fat1
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
LD DE,(BPB.fat_sectors)
|
||||||
|
ADD IX,DE
|
||||||
|
LD A,(BPB.root_handles)
|
||||||
|
LD B,A
|
||||||
|
CALL wr_fat1.loop0
|
||||||
|
|
||||||
|
LD DE,ProcessOK_Msg.ptr
|
||||||
|
CALL cPrint
|
||||||
|
|
||||||
|
CALL showInfo
|
||||||
|
; CALL Return_Vmode
|
||||||
|
; XOR A
|
||||||
|
LD B,0
|
||||||
|
JP quit0
|
||||||
|
|
||||||
|
|
||||||
|
wr_fat0: LD A,(FMTDISK)
|
||||||
|
LD BC,0x0106 ;save FAT sector
|
||||||
|
LD DE,buff
|
||||||
|
RST 0x18 ;next sector not returned!!!
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
wr_fat1: LD A,(BPB.fat_sectors)
|
||||||
|
LD B,A
|
||||||
|
DEC B ;-first FAT sector
|
||||||
|
.loop0: PUSH BC
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
LD BC,0x0106
|
||||||
|
LD A,(FMTDISK)
|
||||||
|
LD DE,buff
|
||||||
|
RST 0x18
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP BC
|
||||||
|
INC IX ;next sector (low)
|
||||||
|
DJNZ .loop0
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
init_fat: LD HL,buff
|
||||||
|
LD (HL),0xf8 ;init FAT
|
||||||
|
INC HL
|
||||||
|
LD (HL),0xff ;first 2 reserved clusters
|
||||||
|
INC HL
|
||||||
|
LD (HL),0xff
|
||||||
|
INC HL
|
||||||
|
LD A,(fat12_flg)
|
||||||
|
RET NZ
|
||||||
|
LD (HL),0xff ;0xfff8, 0xffff for FAT16
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
clear_buff: LD HL,buff
|
||||||
|
LD DE,buff+1
|
||||||
|
LD BC,512
|
||||||
|
XOR A
|
||||||
|
LD (HL),A
|
||||||
|
LDIR
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
showInfo: LD HL,(sectors+2)
|
||||||
|
LD DE,(sectors)
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD (DskInfo_Msg.sectors),DE
|
||||||
|
LD (DskInfo_Msg.sectors+2),HL
|
||||||
|
LD A,(BPB.cluster_size)
|
||||||
|
RRA
|
||||||
|
LD B,0
|
||||||
|
LD C,A
|
||||||
|
JR NC,.next0
|
||||||
|
LD BC,512
|
||||||
|
LD A,"B"
|
||||||
|
LD (DskInfo_Msg.u_sym),A
|
||||||
|
.next0: LD (DskInfo_Msg.u_size),BC
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
LD C,E ;/256
|
||||||
|
LD E,D
|
||||||
|
LD D,L
|
||||||
|
LD H,0
|
||||||
|
LD B,H
|
||||||
|
SRL D ;/8
|
||||||
|
RR E
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
LD (DskInfo_Msg.mb),DE
|
||||||
|
LD HL,(BPB.serial_id)
|
||||||
|
LD DE,(BPB.serial_id+2)
|
||||||
|
LD (DskInfo_Msg.serial),DE
|
||||||
|
LD (DskInfo_Msg.serial+2),HL
|
||||||
|
LD A,(fat12_flg)
|
||||||
|
OR A
|
||||||
|
JR Z,.next1
|
||||||
|
LD A,"2"
|
||||||
|
LD (DskInfo_Msg.FS+20),A
|
||||||
|
.next1: LD DE,DskInfo_Msg.ptr
|
||||||
|
CALL cPrint
|
||||||
|
;bugfix with last printed line with colors
|
||||||
|
;scrolling in console set color column...
|
||||||
|
CALL GetXY ;get YX in DE
|
||||||
|
LD HL,0x0150
|
||||||
|
LD B,D
|
||||||
|
LD C,E
|
||||||
|
CALL winClearScr
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;===================================================
|
||||||
|
;need to get the size of the disk in sectors and check for FAT12 limitation
|
||||||
|
prepare: LD A,(FMTDISK)
|
||||||
|
;
|
||||||
|
CP 2
|
||||||
|
JR NC,.begin
|
||||||
|
;
|
||||||
|
PUSH AF
|
||||||
|
SYS ESTEX_diskinfo
|
||||||
|
JP C,Usage
|
||||||
|
POP AF
|
||||||
|
;
|
||||||
|
.begin: LD BC,0x0008 ;B = subcommand, C = IOCTL func.
|
||||||
|
LD DE,0x55aa ;IOCTL requires Magic num
|
||||||
|
RST 0x18 ;HLDE = disk size in sectors
|
||||||
|
;
|
||||||
|
LD (cfg),A
|
||||||
|
EX AF,AF
|
||||||
|
AND #F0
|
||||||
|
LD (BPB.drv_code),A
|
||||||
|
; EX AF,AF
|
||||||
|
; LD A,H
|
||||||
|
; OR L
|
||||||
|
CALL testDskSize
|
||||||
|
; CF = 0, ®à¬ «ì®¥ § ¢¥à襨¥
|
||||||
|
; CF = 1, ®è¨¡ª
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
LD (BPB.sec_per_trk),BC
|
||||||
|
LD (BPB.heads),DE
|
||||||
|
EXX
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;calculate boot sector (BPB) parameters
|
||||||
|
calc_bpb: LD DE,(BPB.root_handles)
|
||||||
|
LD B,5
|
||||||
|
.loop0: RL D
|
||||||
|
RL E
|
||||||
|
DJNZ .loop0 ;root_size (256) * 32 (element size)
|
||||||
|
LD HL,0
|
||||||
|
CALL div512 ;root_size/512 (sector size)
|
||||||
|
LD (rootSectors),DE ;root size in sectors
|
||||||
|
LD HL,(sectors)
|
||||||
|
LD DE,(sectors+2)
|
||||||
|
LD BC,(BPB.reserved_secs)
|
||||||
|
SBC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,0
|
||||||
|
SBC HL,BC
|
||||||
|
LD BC,(clusters)
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
CALL div32 ;(sectors-reserved_sectors) / max_clusters
|
||||||
|
AND A ;clear flags
|
||||||
|
LD BC,0x0780 ;max 64 sectors for cluster
|
||||||
|
LD A,E
|
||||||
|
.loop1: RLC C ;128 sectors (64kb) not supported
|
||||||
|
CP C
|
||||||
|
JR C,.next_calc0
|
||||||
|
DJNZ .loop1
|
||||||
|
.next_calc0: LD A,C
|
||||||
|
LD (BPB.cluster_size),A ;cluster size in sectors
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
LD B,0
|
||||||
|
CALL div32
|
||||||
|
PUSH DE
|
||||||
|
LD DE,(BPB.reserved_secs)
|
||||||
|
ADD HL,DE ;+reserverd sectors
|
||||||
|
LD (BPB.reserved_secs),HL
|
||||||
|
POP DE
|
||||||
|
LD A,(fat12_flg)
|
||||||
|
OR A
|
||||||
|
JR Z,.calc_fat16
|
||||||
|
LD H,D
|
||||||
|
LD L,E
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,DE ;*3
|
||||||
|
SRL H
|
||||||
|
RR L ;/2
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,0
|
||||||
|
JR .next_calc1
|
||||||
|
.calc_fat16: LD HL,0
|
||||||
|
RL E
|
||||||
|
RL D
|
||||||
|
RL L
|
||||||
|
RL H
|
||||||
|
.next_calc1: CALL div512
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
JR Z,.next_calc2
|
||||||
|
INC DE
|
||||||
|
.next_calc2: LD (BPB.fat_sectors),DE
|
||||||
|
EX DE,HL
|
||||||
|
ADD HL,HL
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(sectors)
|
||||||
|
LD DE,(sectors+2)
|
||||||
|
SBC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,0
|
||||||
|
SBC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,(BPB.reserved_secs)
|
||||||
|
SBC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,0
|
||||||
|
SBC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,(rootSectors)
|
||||||
|
SBC HL,BC
|
||||||
|
LD BC,0
|
||||||
|
EX DE,HL
|
||||||
|
SBC HL,BC
|
||||||
|
LD A,(BPB.cluster_size)
|
||||||
|
LD B,0
|
||||||
|
LD C,A
|
||||||
|
CALL div32
|
||||||
|
LD (DskInfo_Msg.units),DE
|
||||||
|
LD DE,(BPB.reserved_secs)
|
||||||
|
ADD HL,DE
|
||||||
|
LD (BPB.reserved_secs),HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
testDskSize: ;EX AF,AF
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
LD (sectors),DE
|
||||||
|
LD (sectors+2),HL ;save temporary sectors
|
||||||
|
JR NZ,.bigdsk
|
||||||
|
;
|
||||||
|
PUSH HL
|
||||||
|
.tstsmall: LD BC,0xf800+1 ;else, check for fat16 <32M
|
||||||
|
LD H,D ;save in DE small sectors
|
||||||
|
LD L,E
|
||||||
|
SBC HL,BC
|
||||||
|
POP HL
|
||||||
|
JR NC,.bigdsk ;>32M (set Flag)
|
||||||
|
LD BC,0x7800+1 ;else check for limit for fat12
|
||||||
|
EX DE,HL ;15M
|
||||||
|
LD (BPB.small_sectors),HL
|
||||||
|
SBC HL,BC
|
||||||
|
RET NC ;>15M
|
||||||
|
XOR A
|
||||||
|
INC A
|
||||||
|
LD (fat12_flg),A
|
||||||
|
LD A,'2'
|
||||||
|
LD (BPB.fat_id+4),A
|
||||||
|
LD BC,0x0fef
|
||||||
|
LD (clusters),BC
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.bigdsk: ;EX AF,AF
|
||||||
|
;LD (BigDskFlg),A
|
||||||
|
|
||||||
|
LD (BPB.big_sectors),DE
|
||||||
|
LD (BPB.big_sectors+2),HL
|
||||||
|
; check max size for fat16 #3FFD00 sectors (512b) 4ÿ193ÿ152 + 512 + 1+16? ; PC - 7F600000 The FAT file system is limited to 65,525 clusters
|
||||||
|
|
||||||
|
/*
|
||||||
|
The FAT file system is limited to 65,525 clusters - 0x3FFD40 sectors
|
||||||
|
|
||||||
|
FAT TABLES SIZE: 131ÿ072 x 2 = 262 144 = #200
|
||||||
|
ROOT DIR SIZE: 8 192 #10
|
||||||
|
RESERVED SECTORS SIZE: 5 x 512 = 2 560 5
|
||||||
|
HIDDEN SECTORS SIZE
|
||||||
|
*/
|
||||||
|
|
||||||
|
LD BC,#FD00 + 1
|
||||||
|
EX DE,HL
|
||||||
|
SBC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,#003F
|
||||||
|
SBC HL,BC
|
||||||
|
CCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ‚ëå®¤ë¥ § 票ï:
|
||||||
|
; D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; C - ¤¥ì ¥¤¥«¨
|
||||||
|
gen_serial: ld c,#21 ;!HARDCODE Dss.SysTime
|
||||||
|
rst #10 ;!HARDCODE ToDSS
|
||||||
|
;
|
||||||
|
ex de,hl
|
||||||
|
add ix,de
|
||||||
|
ld (BPB.serial_id + 2),ix
|
||||||
|
;
|
||||||
|
ld a,d
|
||||||
|
ld d,b
|
||||||
|
xor c
|
||||||
|
.loop: rra
|
||||||
|
djnz .loop
|
||||||
|
;
|
||||||
|
ld e,h
|
||||||
|
ld h,l
|
||||||
|
ld l,e
|
||||||
|
;
|
||||||
|
ld e,a
|
||||||
|
add hl,de
|
||||||
|
; ld e,l
|
||||||
|
; ld l,h
|
||||||
|
; ld h,e
|
||||||
|
ld (BPB.serial_id),hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
; gen_serial: CALL Randomize
|
||||||
|
; CALL GetRnd
|
||||||
|
; LD (BPB.serial_id),A ;first 8bit (2 bits sec. 6 bits min.)
|
||||||
|
; LD L,A
|
||||||
|
; CALL GetRnd
|
||||||
|
; LD H,A
|
||||||
|
; PUSH HL
|
||||||
|
; .year: LD L,0
|
||||||
|
; LD A,R
|
||||||
|
; RRA
|
||||||
|
; XOR L
|
||||||
|
; LD (BPB.serial_id+1),A
|
||||||
|
; CALL Rand16
|
||||||
|
; POP BC
|
||||||
|
; ADD HL,BC
|
||||||
|
; LD (BPB.serial_id+2),HL
|
||||||
|
; RET
|
||||||
|
|
||||||
|
|
||||||
|
; ;<Vadim> from PQ-DOS formatter
|
||||||
|
; Randomize: SYS ESTEX_systime_get
|
||||||
|
; LD A,B ;seconds
|
||||||
|
; LD (rand1),A
|
||||||
|
; LD A,L ;minutes
|
||||||
|
; LD (rand2),A
|
||||||
|
; LD A,IXL
|
||||||
|
; LD (gen_serial.year+1),A
|
||||||
|
; LD A,R
|
||||||
|
; RRA
|
||||||
|
; LD (rand3),A
|
||||||
|
; CALL GetRnd
|
||||||
|
; LD L,A
|
||||||
|
; CALL GetRnd
|
||||||
|
; LD H,A
|
||||||
|
; LD (seed),HL
|
||||||
|
; RET
|
||||||
|
|
||||||
|
|
||||||
|
; GetRnd: LD A,(rand1)
|
||||||
|
; LD D,A
|
||||||
|
; LD A,(rand2)
|
||||||
|
; LD (rand1),A
|
||||||
|
; ADD A,D
|
||||||
|
; LD D,A
|
||||||
|
; LD A,(rand3)
|
||||||
|
; LD (rand2),A
|
||||||
|
; ADD A,D
|
||||||
|
; RRCA
|
||||||
|
; LD (rand3),A
|
||||||
|
; RET
|
||||||
|
|
||||||
|
|
||||||
|
; Rand16: LD DE,(seed) ;Seed is usually 0
|
||||||
|
; LD A,D
|
||||||
|
; LD H,E
|
||||||
|
; LD L,253
|
||||||
|
; OR A
|
||||||
|
; SBC HL,DE
|
||||||
|
; SBC A,0
|
||||||
|
; SBC HL,DE
|
||||||
|
; LD D,0
|
||||||
|
; SBC A,D
|
||||||
|
; LD E,A
|
||||||
|
; SBC HL,DE
|
||||||
|
; JR NC,Rand
|
||||||
|
; INC HL
|
||||||
|
; Rand: LD (Rand16+1),HL
|
||||||
|
; RET
|
||||||
|
; ;</Vadim>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParseCL: LD A,(HL) ;cmd line size
|
||||||
|
OR A ;0 = no params
|
||||||
|
JP Z,Usage ;goto help message
|
||||||
|
INC HL
|
||||||
|
INC HL ;first param
|
||||||
|
LD A,(HL)
|
||||||
|
LD C,A
|
||||||
|
INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP ':' ;must be dsk: (like C:)
|
||||||
|
JP NZ,Usage ;if not, goto help message
|
||||||
|
LD A,C
|
||||||
|
CALL CapsLetter
|
||||||
|
JP C,Usage ;drive letter is not a letter
|
||||||
|
LD (warn_Msg.dsk),A ;store it in messages
|
||||||
|
LD (Process_Msg.dsk),A ;*
|
||||||
|
LD (ProcessErr_Msg.dsk),A ;*
|
||||||
|
SUB 'A'
|
||||||
|
;
|
||||||
|
.set_A: LD (FMTDISK),A
|
||||||
|
.loop_x: INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CP space
|
||||||
|
JR NZ,.loop_x
|
||||||
|
|
||||||
|
.loop1: CP "/"
|
||||||
|
JR Z,.next0
|
||||||
|
CP "-"
|
||||||
|
JR Z,.next0
|
||||||
|
JP Usage
|
||||||
|
|
||||||
|
.next0: INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP "?"
|
||||||
|
JP Z,Usage
|
||||||
|
POP HL
|
||||||
|
JP Usage
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
confirmation: CALL GetXY
|
||||||
|
LD DE,warn_Msg.ptr
|
||||||
|
CALL cPrint
|
||||||
|
EI
|
||||||
|
HALT
|
||||||
|
SYS ESTEX_waitkey
|
||||||
|
DI
|
||||||
|
RES 5,A
|
||||||
|
CP "Y"
|
||||||
|
LD B,0 ;.NO_ERROR
|
||||||
|
JP NZ,quit0 ;exit to DOS
|
||||||
|
CALL PrintLF
|
||||||
|
RET
|
||||||
|
|
||||||
|
PrintLF: PrintChar cr
|
||||||
|
PrintChar lf
|
||||||
|
RET
|
||||||
|
|
||||||
|
;---------------
|
||||||
|
;from FN
|
||||||
|
;Convert 8bit num to text
|
||||||
|
;IN:
|
||||||
|
; A - 8 bit num
|
||||||
|
; DE - buffer
|
||||||
|
;---------------
|
||||||
|
ConvNumTxt8: PUSH IX
|
||||||
|
PUSH BC
|
||||||
|
LD IX,ConvertFlg
|
||||||
|
RES 7,(IX+#00)
|
||||||
|
LD C,100
|
||||||
|
CALL ConNumb8
|
||||||
|
LD C,10
|
||||||
|
CALL ConNumb8
|
||||||
|
ADD A,"0"
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
POP BC
|
||||||
|
POP IX
|
||||||
|
RET
|
||||||
|
|
||||||
|
ConNumb8: LD B,#2F
|
||||||
|
INC B
|
||||||
|
SUB C
|
||||||
|
JR NC,$-2
|
||||||
|
ADD A,C
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,B
|
||||||
|
CP #30
|
||||||
|
JR Z,$+6
|
||||||
|
SET 7,(IX+#00)
|
||||||
|
BIT 7,(IX+#00)
|
||||||
|
JR Z,$+4
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
EX AF,AF'
|
||||||
|
RET
|
||||||
|
|
||||||
|
ConvertFlg: DB #0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
badClustErr: PrintChars badClust_Msg
|
||||||
|
;LD B,-2
|
||||||
|
LD B,#0D ; .UNKNOWN_FORMAT
|
||||||
|
JR quit0
|
||||||
|
|
||||||
|
Usage: LD DE,usage_Msg.ptr
|
||||||
|
CALL cPrint
|
||||||
|
; PrintChars usage_Msg
|
||||||
|
LD B,0
|
||||||
|
|
||||||
|
quit0: PUSH BC
|
||||||
|
CALL Return_Vmode
|
||||||
|
POP BC
|
||||||
|
SYS ESTEX_exit
|
||||||
|
JP $
|
||||||
|
;===================================================
|
||||||
|
FMTDISK: DB 0 ;formatting disk
|
||||||
|
BigDskFlg: DB 0 ;big disk (>32Mb) flag
|
||||||
|
cfg: DB 0
|
||||||
|
rootSectors: DW 0
|
||||||
|
sectors: DS 4 ;tmp value of sectors on the disk
|
||||||
|
clusters: DW 0xffef
|
||||||
|
fat_sectors: DW 0
|
||||||
|
system_sectors: DW 0
|
||||||
|
fat12_flg: DB 0
|
||||||
|
serial: DW 0,0 ;Volume Serial Number
|
||||||
|
|
||||||
|
; rand1: DB 0
|
||||||
|
; rand2: DB 0
|
||||||
|
; rand3: DB 0
|
||||||
|
; seed: DB 0
|
||||||
|
|
||||||
|
|
||||||
|
ALIGN 256
|
||||||
|
|
||||||
|
BPB:
|
||||||
|
.JMP: DB 0xeb,0xfe,0x00 ; § é¨â ®â ¡ ª« ¨§¬ (§ £à㧪 á í⮣® ¤¨áª PC ¯à¨¢¥¤¥â ª § ¢¨á ¨î. JMP $)
|
||||||
|
.OEM: DB "DSS . "
|
||||||
|
.sector_size: DW 512 ;+11 ; sector size in bytes
|
||||||
|
.cluster_size: DB 0 ;+13 ; cluster size in sectors
|
||||||
|
.reserved_secs: DW 5 ;+14 ; reserved sector
|
||||||
|
.fat_ncopy: DB 2 ;+16 ; # copy`s of FAT
|
||||||
|
.root_handles: DW 256 ;+17 ; root size (records on root)
|
||||||
|
.small_sectors: DW 0 ;+19 ; # of sectors (<32Mb)
|
||||||
|
.media_id: DB 0xf8 ;+21 ; Media ID
|
||||||
|
.fat_sectors: DW 0 ;+22 ; # sectors for one copy of FAT
|
||||||
|
.sec_per_trk: DW 0 ;+24 ; sectors per track
|
||||||
|
.heads: DW 0 ;+26 ; # of heads
|
||||||
|
; extended boot-record
|
||||||
|
.hide_sectors: DWORD 0 ;+28 ; # of hidden sectors
|
||||||
|
.big_sectors: DWORD 0 ;+32 ; # of sectors (>32Mb)
|
||||||
|
.drv_code: DW 0x80 ;+36 ; drive code (0x80 for HDD)
|
||||||
|
.eboot_sig: DB 0x29 ;+38 ; extended boot signature (?)
|
||||||
|
.serial_id: DS 4 ;+39 ; Volume serial
|
||||||
|
.vol_name: DB "NO NAME " ;+43 ; Volume label
|
||||||
|
.fat_id: DB "FAT16 " ;+54 ; FAT id (FAT12 or FAT16)
|
||||||
|
|
||||||
|
BPBsize = $-BPB
|
||||||
|
INCBIN "x86_boot.bin" ; !FIXIT ã¡à âì
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
about_Msg: db cr,lf,"Format utility version 0.3.",BUILD_COUNT_T," (",BUILD_DAY_T,".",BUILD_MONTH_T,".",BUILD_YEAR_T,")"
|
||||||
|
db cr,lf,"by Miroshnichenko Alexander aka Sayman@SprinterTeam",cr,lf,0
|
||||||
|
.ptr: dw about_Msg
|
||||||
|
|
||||||
|
*/
|
||||||
|
;===================================================
|
||||||
|
about_Msg: DB cr,lf,"Format utility version 0.3.",BUILD_COUNT_T," (",BUILD_DAY_T,".",BUILD_MONTH_T,".",BUILD_YEAR_T,")"
|
||||||
|
DB cr,lf,"by Miroshnichenko Alexander aka Sayman, (c) 2021.\r\nBug fixes by Anatoliy Belyanskiy, Sprinter Team, 2026.",cr,lf,0
|
||||||
|
.ptr: DW about_Msg
|
||||||
|
|
||||||
|
|
||||||
|
usage_Msg: DB cr,lf,"This utility performs logical formatting and initializes the file system on the disks."
|
||||||
|
DB cr,lf,col_cmd,col_red,"WARNING!!!",col_cmd,col_white," This version is limited for ",col_cmd,col_green,"2Gb",col_cmd,col_white," for FAT16 FS!"
|
||||||
|
DB cr,lf,cr,"usage:"
|
||||||
|
DB cr,lf,"FORMAT volume [key1] [key2] [keyN]"
|
||||||
|
DB cr,lf," keys are:"
|
||||||
|
DB cr,lf,tab,"in this version supported only /? key for help."
|
||||||
|
DB cr,lf,cr,lf,0
|
||||||
|
.ptr: DW usage_Msg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
warn_Msg: DB cr,lf,cr,lf,col_cmd,col_red,"WARNING: ALL DATA ON YOR HARD DISK DRIVE ",col_cmd,col_violet,"%c:",col_cmd,col_red," WILL BE LOST!",col_cmd,col_white,cr,lf
|
||||||
|
DB cr,lf,"Proceed with Format [Y/N]?",0
|
||||||
|
.ptr: DW warn_Msg
|
||||||
|
.dsk: DB 0
|
||||||
|
|
||||||
|
Process_Msg: DB cr,lf
|
||||||
|
DB cr,lf,"Quick formatting disk %c:...",0
|
||||||
|
.ptr: DW Process_Msg
|
||||||
|
.dsk: DB 0
|
||||||
|
|
||||||
|
ProcessErr_Msg: DB cr,lf,cr,lf,col_cmd,col_red,"ABORTED: CAN'T FORMAT DRIVE ",col_cmd,col_violet,"%c:",cr,lf,col_cmd,col_yellow,"FAT16 does not support drives larger than 2GB.",cr,lf,cr,lf,0
|
||||||
|
.ptr: DW ProcessErr_Msg
|
||||||
|
.dsk: DB 0
|
||||||
|
|
||||||
|
|
||||||
|
ProcessOK_Msg: DB "Done.",cr,lf,cr,lf,0
|
||||||
|
.ptr: DW ProcessOK_Msg
|
||||||
|
|
||||||
|
|
||||||
|
DskInfo_Msg: DB "Formatted disk parameters:",cr,lf
|
||||||
|
DB "Total sectors: ",tab,col_cmd,col_magenta,"%lu",col_cmd,col_white,cr,lf
|
||||||
|
DB "Total size: ",tab,col_cmd,col_magenta,"%uMb",col_cmd,col_white,cr,lf
|
||||||
|
DB "Units: ",tab,tab,col_cmd,col_magenta,"%u",col_cmd,col_white,cr,lf
|
||||||
|
DB "Unit size: ",tab,col_cmd,col_magenta,"%u%c",col_cmd,col_white,cr,lf
|
||||||
|
.FS: DB "File system: ",tab,col_cmd,col_magenta,"FAT16",col_cmd,col_white,cr,lf
|
||||||
|
DB "Serial: ",tab,col_cmd,col_magenta,"%02x-%02x",col_cmd,col_white,cr,lf
|
||||||
|
DB "Label: ",tab,tab,col_cmd,col_magenta,"NO LABEL",col_cmd,col_white,cr,lf,cr,lf,0
|
||||||
|
.ptr: DW DskInfo_Msg
|
||||||
|
.sectors: DS 4
|
||||||
|
.mb: DW 0
|
||||||
|
.units: DW 0
|
||||||
|
.u_size: DW 0
|
||||||
|
.u_sym: DB "K",0
|
||||||
|
.serial: DS 4
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
badClust_Msg: DB cr,lf,"Bad cluster size.",cr,lf,cr,lf,0
|
||||||
|
|
||||||
|
;WARNING: ALL DATA ON YOR HARD DISK DRIVE Z: WILL BE LOST!
|
||||||
|
|
||||||
|
buff EQU ( high $ + ((low $)<?1) ) * 256
|
||||||
|
|
||||||
|
; ALIGN 256
|
||||||
|
; buff:
|
||||||
|
|
||||||
|
|
||||||
|
; equ ($/80h)*80h+80h
|
||||||
|
|
||||||
|
|
||||||
|
DISPLAY "programm size: ",$-EXEHeader
|
||||||
|
Loader_End:
|
||||||
|
DISPLAY "last address: ",$
|
||||||
|
; SAVEBIN "format.exe",EXEHeader,$-EXEHeader
|
||||||
|
|
||||||
|
|
||||||
|
IFUSED FAT32_FORMAT
|
||||||
|
/*
|
||||||
|
BOOT_SECTOR EQU #00
|
||||||
|
.JMP EQU #00 ; BLOCK 3,0 BS_jmpBoot Jump to bootstrap (E.g. eb 3c 90; on i86: JMP 003E NOP. One finds either eb xx 90, or e9 xx xx.
|
||||||
|
.ID_NAME EQU #03 ; TEXT 8 BS_OEMName DOS NAME - DB "DSS_1.70"
|
||||||
|
; Block Parameters BIOS
|
||||||
|
.BytesPerSector DRV_GET_PAR (IX) EQU #0B ; WORD #200 BPB_BytsPerSec <09> §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||||
|
.SectorsPerCluster ;!TODO EQU #0D ; BYTE 2 BPB_SecPerClus <09> §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||||||
|
.RESERVED_SECTORS ;!TODO EQU #0E ; WORD 1 BPB_ResvdSecCnt <09> §¬¥à á¨á⥬®© ®¡« á⨠(¢ª«îç ï íâ®â ᥪâ®à) RESERVE SECTORS
|
||||||
|
.Number_of_FATs ;!TODO EQU #10 ; BYTE 2 BPB_NumFATs Š®«¨ç¥á⢮ â ¡«¨æ FAT
|
||||||
|
.FilesInRootDIR 0 EQU #11 ; WORD 112 BPB_RootEntCnt —¨á«® ®¯¨á ⥫¥© ä ©«®¢ ¢ ª®à¥¢®¬ ª â «®£¥ (¢ FAT32 - 0)
|
||||||
|
.SectorsPerDrive ;!TODO EQU #13 ; WORD 1440 BPB_TotSec16 ޡ饥 ç¨á«® ᥪâ®à®¢ ¤¨áª¥ (¥á«¨ 0, â® à §¬¥à - ¢ .BPB_BIG_TOTAL_SECTORS)
|
||||||
|
.DRIVE_TYPE !DRV_TYPE EQU #15 ; BYTE #F0 BPB_Media ’¨¯ ãáâனáâ¢
|
||||||
|
.SectorsPerFAT16 0 EQU #16 ; WORD 2 BPB_FATSz16 <09> §¬¥à ®¤®© FAT ¢ ᥪâ®à å (0 ¢ FAT32)
|
||||||
|
.SectorsPerTrack GenIOCTL.GetParams EQU #18 ; WORD 9 BPB_SecPerTrk <09> §¬¥à ¤®à®¦ª¨ ¢ ᥪâ®à å
|
||||||
|
.HEADS GenIOCTL.GetParams EQU #1A ; WORD 2 BPB_NumHeads ª®«¨ç¥á⢮ £®«®¢®ª
|
||||||
|
.HIDDEN EQU #1C ; DWORD 0 BPB_HiddSec ª®«¨ç¥á⢮ áªàëâëå ᥪâ®à®¢
|
||||||
|
.BPB_BIG_TOTAL_SECTORS_L EQU #20 ; WORD 0 BPB_TotSec32 BIG TOTAL SECTOR Low word
|
||||||
|
.BPB_BIG_TOTAL_SECTORS_H EQU #22 ; WORD 0 BPB_TotSec32 BIG TOTAL SECTOR High word
|
||||||
|
; FAT 32
|
||||||
|
.SectorsPerFAT32 EQU #24 ; DWORD 4 BPB_FATSz32 <09> §¬¥à ®¤®© FAT ¢ ᥪâ®à å
|
||||||
|
.MainFATnumber EQU #28 ; WORD 0 BPB_ExtFlags <09>®¬¥à £« ¢®© â ¡«¨æë FAT
|
||||||
|
.Version EQU #2A ; WORD 0 BPB_FSVer ‚¥àá¨ï FAT32 (®¡ëç® 0)
|
||||||
|
.RootDirStartCluster EQU #2C ; DWORD 2 BPB_RootClus <09>¥à¢ë© ª« áâ¥à ª®à¥¢®£® ª â «®£ (®¡ëç® 2)
|
||||||
|
.FSINFO_Sector EQU #30 ; WORD 1 BPB_FSInfo <09>®¬¥à ᥪâ®à áâàãªâãàë FSINFO (®¡ëç® 1)
|
||||||
|
.CopyBootSector EQU #32 ; WORD 6 BPB_BkBootSec <09>®¬¥à ᥪâ®à - ª®¯¨¨ § £à㧮箣® (®¡ëç® 6)
|
||||||
|
.reserved_block: EQU #34 ; BLOCK 12 BPB_Reserved ‡ १¥à¢¨à®¢ ®
|
||||||
|
.FDD_Number EQU #40 ; BYTE 0 BS_DrvNum <09>®¬¥à ¤¨áª®¢®¤ ¤«ï äãªæ¨© BIOS
|
||||||
|
.reserved_2: EQU #41 ; BYTE 0 BS_Reserved1 ‡ १¥à¢¨à®¢ ®
|
||||||
|
.FAT32.EXT_BOOT_REC_SIGNATURE EQU #42 ; BYTE #29 BS_BootSig ‘¨£ âãà - #29
|
||||||
|
.FAT32.SERIAL_NUMBER EQU #43 ; DWORD 0 BS_VolID VOLUME SERIAL NUMBER
|
||||||
|
.FAT32.LABEL EQU #47 ; TEXT 11 BS_VolLab Œ¥âª ¤¨áª
|
||||||
|
.ID_FAT32 EQU #52 ; TEXT 8 BS_FilSysType €¡¡à¥¢¨ âãà ä ©«®¢®© á¨á⥬ë
|
||||||
|
.BOOT_CODE_FAT32 EQU #5A
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
!DRV_TYPE: GenIOCTL.GetParams - 䨧¨ç¥áª¨© ®¬¥à
|
||||||
|
0,1 - BIOS.DRV_GET_PAR - ⨯ ä«®¯ àï
|
||||||
|
#8x - Hard Drive
|
||||||
|
®á⠫쮥 ¯®¤ã¬ âì
|
||||||
|
;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
ENDIF
|
||||||
236
format/include/estex_h.asm
Executable file
236
format/include/estex_h.asm
Executable file
@ -0,0 +1,236 @@
|
|||||||
|
;------------------------------
|
||||||
|
;Estex DOS system api codes
|
||||||
|
;!!!‚ᥠ®¬¥à äãªæ¨ï ¯¥à¥¤ îâáï ç¥à¥§ ॣ¨áâà C!!!
|
||||||
|
;!!!…᫨ ®¬¥à äãªæ¨¨ ¯¥à¥¤ ñâáï ¨ ç¥, ®¡ í⮬ ¡ã¤¥â á®®¡é¥® ¢ ®¯¨á ¨¨!!!
|
||||||
|
;------------------------------
|
||||||
|
|
||||||
|
ESTEX_getver = 0x00 ;¯®«ãç¨âì ¢¥àá¨î ¤®á
|
||||||
|
|
||||||
|
ESTEX_chdisk = 0x01 ;ᬥ ⥪ã饣® ¤¨áª
|
||||||
|
ESTEX_curdisk = 0x02 ;¯®«ãç¨âì ⥪ã騩 ¤¨áª
|
||||||
|
ESTEX_diskinfo = 0x03 ;¨ä ® ¤¨áª¥
|
||||||
|
ESTEX_DEVRESCAN = 0x08 ;¯¥à¥áª ¨à®¢ âì ¢á¥ ¤¥¢ ©áë (¤¨áª¨).
|
||||||
|
ESTEX_bootdisk = 0x09 ;¯®«ãç¨âì ¨«¨ ãáâ ®¢¨âì á¨áâ¥¬ë© ¤¨áª
|
||||||
|
|
||||||
|
ESTEX_fcreate = 0x0a ;á®§¤ âì ä ©« (á ®¡ã«¥¨¥¬ áâ ண®)
|
||||||
|
ESTEX_fcreate_new = 0x0b ;á®§¤ âì ä ©« (á ®è¨¡ª®© ¥á«¨ áâ àë© ä ©« ¥áâì)
|
||||||
|
ESTEX_fdelete = 0x0e ;㤠«¨âì ä ©«
|
||||||
|
ESTEX_frename = 0x10 ;¯¥à¥¨¬¥®¢ âì ä ©«
|
||||||
|
ESTEX_fopen = 0x11 ;®âªàëâì ä ©«
|
||||||
|
ESTEX_fclose = 0x12 ;§ ªàëâì ä ©«
|
||||||
|
ESTEX_fread = 0x13 ;¯à®ç¨â âì ¤ ë¥ ¨§ ä ©«
|
||||||
|
ESTEX_fwrite = 0x14 ;§ ¯¨á âì ¢ ä ©«
|
||||||
|
EXTEX_fmovefp = 0x15 ;¯¥à¥¬¥áâ¨âì 㪠§ â¥«ì ¢ ä ©«¥
|
||||||
|
ESTEX_fattribute = 0x16 ;¯®«ãç¨âì ¨/¨«¨ ¨§¬¥¨âì âਡãâë
|
||||||
|
ESTEX_fget_dt = 0x17 ;¯®«ãç¨âì ¤ âã ä ©«
|
||||||
|
ESTEX_fset_dt = 0x18 ;ãáâ ®¢¨âì ¤ âã ä ©«
|
||||||
|
ESTEX_find_first = 0x19 ;¯®¨áª ¯¥à¢®£®...
|
||||||
|
ESTEX_find_next = 0x1a ;¯®¨áª á«¥¤ãî饣®
|
||||||
|
|
||||||
|
ESTEX_mkdir = 0x1b ;á®§¤ âì ª â «®£
|
||||||
|
ESTEX_rmdir = 0x1c ;㤠«¨âì ª â «®£
|
||||||
|
ESTEX_chdir = 0x1d ;ᬥ¨âì ª â «®£
|
||||||
|
ESTEX_curdir = 0x1e ;¯®«ãç¨âì ⥪ã騩 ª â «®£
|
||||||
|
|
||||||
|
ESTEX_systime_get = 0x21 ;¯®«ãç¨âì á¨á⥬®¥ ¢à¥¬ï
|
||||||
|
ESTEX_systime_set = 0x22 ;ãáâ ®¢¨âì á¨á⥬®¥ ¢à¥¬ï
|
||||||
|
|
||||||
|
ESTEX_setmemwin = 0x38 ;<3B>®¤ª«î票¥ áâà ¨æë ¯ ¬ïâ¨
|
||||||
|
ESTEX_setmemwin1 = 0x39 ;<3B>®¤ª«î票¥ áâà ¨æë ¯ ¬ï⨠¢ 1 ®ª®
|
||||||
|
ESTEX_setmemwin2 = 0x3a ;<3B>®¤ª«î票¥ áâà ¨æë ¯ ¬ï⨠¢ 2 ®ª®
|
||||||
|
ESTEX_setmemwin3 = 0x3b ;<3B>®¤ª«î票¥ áâà ¨æë ¯ ¬ï⨠¢ 3 ®ª®
|
||||||
|
ESTEX_getmeminfo = 0x3c ;<3B>®«ãç¨âì ¨ä®à¬ æ¨î ® ¯ ¬ïâ¨
|
||||||
|
ESTEX_getmem = 0x3d ;‡ ¯à®á¨âì (¯®«ãç¨âì) ¡«®ª ¯ ¬ïâ¨
|
||||||
|
ESTEX_freemem = 0x3e ;Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
|
||||||
|
ESTEX_setmem = 0x3a ;ˆ§¬¥¨âì ¡«®ª ¯ ¬ïâ¨
|
||||||
|
|
||||||
|
ESTEX_waitkey = 0x30 ;ަ¨¤ ¨¥ ᨬ¢®« á ª« ¢¨ âãàë
|
||||||
|
ESTEX_scankey = 0x31 ;ޝà®á ª« ¢¨ âãàë ¡¥§ ®¦¨¤ ¨ï
|
||||||
|
ESTEX_echokey = 0x32 ;ަ¨¤ ¨¥ ᨬ¢®« á ª« ¢¨ âãàë á ¯¥ç âìî
|
||||||
|
ESTEX_keystat = 0x33 ;<3B>®«ãç¨âì á®áâ®ï¨¥ ª« ¢¨ âãàë
|
||||||
|
ESTEX_clearkey = 0x35 ;Žç¨áâ¨âì ¡ãä¥à ª« ¢¨ âãàë ¨ ¢ë¯®«¨âì äãªæ¨î
|
||||||
|
ESTEX_keyset = 0x36 ;“¯à ¢«¥¨¥ áâனª ¬¨ ª« ¢¨ âãàë
|
||||||
|
ESTEX_testkey = 0x37 ;ޝà®á ¡ãä¥à ª« ¢¨ âãàë
|
||||||
|
|
||||||
|
ESTEX_exec = 0x40 ;‚믮«¨âì ä ©«
|
||||||
|
ESTEX_exit = 0x41 ;‡ ¢¥à襨¥ ¯à®£à ¬¬ë
|
||||||
|
ESTEX_wait = 0x42 ;<3B>®«ãç¨âì ª®¤ § ¢¥àè¥¨ï ¯à®£à ¬¬ë
|
||||||
|
|
||||||
|
ESTEX_cmd_getswitch = 0x43 ;‚뤥«¨âì ¯ à ¬¥âà ª®¬ ¤®© áâப¨
|
||||||
|
ESTEX_cmd_dosname = 0x44 ;<3B>८¡à §®¢ âì ¨¬ï ä ©«
|
||||||
|
ESTEX_cmd_parse = 0x45 ;<3B> §¡®à ª®¬ ¤®© áâப¨
|
||||||
|
|
||||||
|
ESTEX_env = 0x46 ;‘¨á⥬®¥ ®ªà㦥¨¥
|
||||||
|
|
||||||
|
ESTEX_appinfo = 0x47 ;<3B>®«ã票¥ ¨ä®à¬ 樨 ¯à¨«®¦¥¨ï
|
||||||
|
|
||||||
|
ESTEX_setvmode = 0x50 ;‚ë¡®à ०¨¬ íªà
|
||||||
|
ESTEX_getvmode = 0x51 ;<3B>®«ãç¨âì ⥪ã騩 ०¨¬ íªà
|
||||||
|
ESTEX_setcursor = 0x52 ;“áâ ®¢¨âì ¯®§¨æ¨î ªãàá®à
|
||||||
|
ESTEX_getcursor = 0x53 ;<3B>®«ãç¨âì ⥪ãéãî ¯®§¨æ¨î ªãàá®à
|
||||||
|
ESTEX_setscr = 0x54 ;‚ë¡à âì ªâ¨¢ãî áâà ¨æã íªà
|
||||||
|
ESTEX_scrollscr = 0x55 ;<3B>பàã⪠®ª
|
||||||
|
ESTEX_clearscr = 0x56 ;Žç¨á⪠®ª
|
||||||
|
ESTEX_rdchar = 0x57 ;‘ç¨â âì ᨬ¢®« á íªà
|
||||||
|
ESTEX_wrchar = 0x58 ;<3B> ¯¥ç â âì ᨬ¢®« íªà ¥
|
||||||
|
ESTEX_scrwincopy = 0x59 ;‡ ¯®¬¨âì ®ª® íªà
|
||||||
|
ESTEX_scrwinrest = 0x5a ;‚®ááâ ®¢¨âì ®ª® íªà
|
||||||
|
ESTEX_pchar = 0x5b ;<3B> ¯¥ç â âì ᨬ¢®« ¢ ⥪ã饩 ¯®§¨æ¨¨ ªãàá®à
|
||||||
|
ESTEX_pchars = 0x5c ;<3B> ¯¥ç â âì áâபã ᨬ¢®«®¢ ¢ ⥪ã饩 ¯®§¨æ¨¨ ªãàá®à
|
||||||
|
|
||||||
|
;-------------------------------------------
|
||||||
|
_ENVIRONMENT:
|
||||||
|
._GET_SYS = 0 ;¯®«ãç¨âì á¨á⥬®¥ ®ªà㦥¨¥
|
||||||
|
._GET_VAL = 1 ;¯®«ãç¨âì ¯ à ¬¥âàë 㪠§ ®© ¯¥à¥¬¥®©
|
||||||
|
._SET_ENV = 2 ;ãáâ ®¢¨âì ¯¥à¥¬¥ãî
|
||||||
|
|
||||||
|
;-------------------------------------------
|
||||||
|
_CMD_PARSE:
|
||||||
|
._PARSE_CMD = 0 ;<3B> §®¡à âì áâபã
|
||||||
|
._GET_DSK = 1 ;‚뤥«¨âì ¨¬ï ¤¨áª
|
||||||
|
._GET_DIR = 2 ;‚뤥«¨âì ¤¨à¥ªâ®à¨î
|
||||||
|
._GET_FILENAME = 3 ;‚뤥«¨âì ¨¬ï ä ©«
|
||||||
|
._GET_FILE_EXT = 4 ;‚뤥«¨âì à áè¨à¥¨¥ ä ©«
|
||||||
|
._GET_FULL_FILEPATH = 5 ;‚뤥«¨âì ¨¬ï ¤¨áª , ¯ãâì ª ä ©«ã, ¨¬ï ä ©« ¨ à áè¨à¥¨¥ ä ©«
|
||||||
|
._NOFUNC = 6 ;‡ १¥à¢¨à®¢
|
||||||
|
._SELECT_ARG = 7 ;‚뤥«¨âì ¯ à ¬¥âà ª®¬ ¤®© áâப¨
|
||||||
|
._CONV_TO_DOS = 8 ;<3B>८¡à §®¢ âì ¨§ 11 ᨬ¢®«ì®£® ä®à¬ â ¢ ä®à¬ â „Ž‘
|
||||||
|
._CONF_FROM_DOS = 9 ;<3B>८¡à §®¢ âì ¨§ ä®à¬ â „Ž‘ ¢ 11 ᨬ¢®«ìë© ä®à¬ â
|
||||||
|
|
||||||
|
;--------------------------------------------
|
||||||
|
_FOPEN:
|
||||||
|
._IORW = 0 ;®âªàëâì ¤«ï çâ¥¨ï ¨ § ¯¨á¨
|
||||||
|
._IOREAD = 1 ;®âªàëâì ⮫쪮 ¤«ï ç⥨ï
|
||||||
|
._IOWRITE = 2 ;®âªàëâì ¤«ï § ¯¨á¨
|
||||||
|
|
||||||
|
;--------------------------------------------
|
||||||
|
_MOVEFP:
|
||||||
|
._SEEK_SET = 0 ;®â ç « ä ©«
|
||||||
|
._SEEK_CUR = 1 ;®â ⥪ã饣® § 票ï 㪠§ ⥫ï
|
||||||
|
._SEEK_END = 2 ;®â ª®æ ä ©«
|
||||||
|
|
||||||
|
_VMODE:
|
||||||
|
._T40 = 0x02 ;⥪áâ®¢ë© à¥¦¨¬ 40 ᨬ¢®«®¢
|
||||||
|
._T80 = 0x03 ;⥪â®á¢ë© ०¨¬ 80 ᨬ¢®«®
|
||||||
|
._320p = 0x81 ;£à ä¨ç¥áª¨© ०¨¬ 320*256*8¡¨â
|
||||||
|
._640p = 0x81 ;£à ä¨ç¥áª¨© ०¨¬ 640*256*4¡¨â
|
||||||
|
._SCREEN0 = 0x0 ;áâà ¨æ ०¨¬ 0
|
||||||
|
._SCREEN1 = 0x01 ;áâà ¨æ ०¨¬ 1
|
||||||
|
|
||||||
|
._normal = 0x50 ;०¨¬ ¢ë¢®¤ - ®¡ëçë© (¢á¥ ¤ ë¥ ¢ RAM ¨ VRAM)
|
||||||
|
._transparent = 00001000b ;०¨¬ ¢ë¢®¤ á ¯à®§à çë¬ æ¢¥â®¬ (0xff ¨£®à¨àã¥âáï)
|
||||||
|
._spr = 00000100b ;०¨¬ á¯à ©â (¤ ë¥ ¯®¯ ¤ îâ ⮫쪮 ¢ VRAM)
|
||||||
|
|
||||||
|
;--------------------------------------------
|
||||||
|
mmu0 = 0x82 ;cpu window 0 = addr 0x0000
|
||||||
|
mmu1 = 0xa2 ;... 1 = 0x4000
|
||||||
|
mmu2 = 0xc2 ;... 2 = 0x8000
|
||||||
|
mmu3 = 0xe2 ;... 3 = 0xc000
|
||||||
|
|
||||||
|
port_y = 0x89 ;port for Y coord
|
||||||
|
rgmod = 0xc9 ;¯¥à¥ª«îç ¥â áâà ¨æë ०¨¬
|
||||||
|
border = 0xfe ;¡®à¤îà
|
||||||
|
rgscr = 0xe9
|
||||||
|
rgacc = 0xa9
|
||||||
|
|
||||||
|
;sys_port3c equ 3ch
|
||||||
|
;sys_port7c equ 7ch
|
||||||
|
sys_port_on = 0x7c
|
||||||
|
sys_port_off = 0x3c
|
||||||
|
|
||||||
|
d_tbon = 3 ; ¤ ë¥ ¤«ï ¢ª«î票ï turbo
|
||||||
|
d_tboff = 2 ; ¤ ë¥ ¤«ï ¢ëª«î票ï turbo
|
||||||
|
d_rom16on = 1
|
||||||
|
d_rom16off = 0
|
||||||
|
|
||||||
|
cnf_page = 0x40 ;§ ¯à¥â § ¯¨áì áî¤ !!!
|
||||||
|
|
||||||
|
;com port
|
||||||
|
CTC_CHAN0 = 0x10
|
||||||
|
CTC:
|
||||||
|
._CHAN0 = 0x10
|
||||||
|
._CHAN1 = 0x11
|
||||||
|
._CHAN2 = 0x12
|
||||||
|
._CHAN3 = 0x13
|
||||||
|
|
||||||
|
|
||||||
|
SIO:
|
||||||
|
.DATA_REG_A = 0x18
|
||||||
|
.CONTROL_A = 0x19
|
||||||
|
.DATA_REG_B = 0x1a
|
||||||
|
.CONTROL_B = 0x1b
|
||||||
|
|
||||||
|
;lpt port
|
||||||
|
PIO:
|
||||||
|
.DATA_REG_A = 0x1c
|
||||||
|
.COMMAND_REG_A = 0x1d
|
||||||
|
.DATA_REG_B = 0x1e
|
||||||
|
.COMMAND_REG_B = 0x1f
|
||||||
|
|
||||||
|
;ISA-8
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
;If you want to interaction with ISA devices, you have to make following steps:
|
||||||
|
;1) send 10h value to port 1FFDh(system port);
|
||||||
|
;2) send control byte to port 0E2h(third memory window port);
|
||||||
|
;control byte:
|
||||||
|
;D7...should be 1
|
||||||
|
;D6...should be 1
|
||||||
|
;D5...should be 0
|
||||||
|
;D4...should be 1
|
||||||
|
;D3...should be 0
|
||||||
|
;D2...specify access mode (0 - ISA memory, 1 - ISA ports)
|
||||||
|
;D1...specify number of ISA slot
|
||||||
|
;D0...should be 0
|
||||||
|
;fixed bug with D2 and D1 bits (functional exchange, but not documented).
|
||||||
|
|
||||||
|
;The read/write signals are forming from read/write signals memory range 0C000h-0FFFFh.
|
||||||
|
;And the address lines A13...A0 has taken from processor data-BUS.
|
||||||
|
;The other ISA-signals such as RESET, AEN, A19...A14 can be set in port 9FBDh. And default value is 00h.
|
||||||
|
;port 9FBDh:
|
||||||
|
;D7...RESET, 1=reset, 0=normal
|
||||||
|
;D6...AEN, 1=
|
||||||
|
;D5...A19
|
||||||
|
;D4...A18
|
||||||
|
;D3...A17
|
||||||
|
;D2...A16
|
||||||
|
;D1...A15
|
||||||
|
;D0...A14
|
||||||
|
sc_port = 0x1ffd
|
||||||
|
ISA:
|
||||||
|
.DIR = 0x9fbd
|
||||||
|
.BASE_ADDR = 0xc000
|
||||||
|
.SLOT0_RAM = 0xd0
|
||||||
|
.SLOT1_RAM = 0xd2
|
||||||
|
.SLOT0_PORT = 0xd4
|
||||||
|
.SLOT1_PORT = 0xd6
|
||||||
|
|
||||||
|
;VMODE:
|
||||||
|
;._normal = 0x50 ;०¨¬ ¢ë¢®¤ - ®¡ëçë© (¢á¥ ¤ ë¥ ¢ RAM ¨ VRAM)
|
||||||
|
;._transparent = 00001000b ;०¨¬ ¢ë¢®¤ á ¯à®§à çë¬ æ¢¥â®¬ (0xff ¨£®à¨àã¥âáï)
|
||||||
|
;._spr = 00000100b ;०¨¬ á¯à ©â (¤ ë¥ ¯®¯ ¤ îâ ⮫쪮 ¢ VRAM)
|
||||||
|
|
||||||
|
cr = 0x0d ;¢®§¢à â ª®à¥âª¨
|
||||||
|
lf = 0x0a ;®¢ ï áâப
|
||||||
|
space = 0x20 ;ᨬ¢®« ¯à®¡¥«
|
||||||
|
tab = 0x09 ;ᨬ¢®« â ¡ã«ï樨
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------------------
|
||||||
|
;BIOS
|
||||||
|
BIOS_reset_drive = 0x51 ; ‘¡à®á ª®â஫«¥à ¨ áâனª ¤¨áª
|
||||||
|
BIOS_rd_sector = 0x55 ; —⥨¥ (ᥪâ®à®¢) á ãáâனá⢠.
|
||||||
|
BIOS_wr_sector = 0x56 ; ‡ ¯¨áì (ᥪâ®à®¢) ãáâனá⢮.
|
||||||
|
BIOS_get_drv_list = 0x5f ; ¯®«ãç¨âì ᯨ᮪ ¤¨áª®¢ëå ãáâனáâ¢
|
||||||
|
BIOS_get_cursor_coords = 0x8e ; <20>®«ãç¨âì ⥪ã饥 ¯®«®¦¥¨¥ (ªãàá®à ) ¢ë¢®¤ íªà .
|
||||||
|
BIOS_get_mem_pg = 0xc4 ; ¯®«ãç¨âì 䨧. ®¬¥à áâà. ¡«®ª
|
||||||
|
BIOS_get_pg_tbl = 0xc5 ; get pages table from handle (id_blk)
|
||||||
|
BIOS_clear_scr = 0x8d ; ®ç¨á⪠íªà , 㪠§ ¨¥¬ ᨬ¢®« § ¯®«¥¨ï
|
||||||
|
BIOS_get_cursor = 0x8e ; ã§ âì ¯®«®¦. ªãàá®à
|
||||||
|
BIOS_set_cursor = 0x84 ; ãáâ. ¯®«®¦. ªãàá®à
|
||||||
|
BIOS_print_chars = 0x82 ; ¢ë¢®¤ ᨬ¢®«®¢ íªà á ⥪ã饣® § ª®¬¥áâ ¡¥§ âਡã⮢
|
||||||
|
BIOS_screen_save = 0xb2 ; á®åà ¨âì íªà ...
|
||||||
|
BIOS_screen_restore = 0xb3 ; ¢®ááâ ®¢¨âì íªà ...
|
||||||
|
BIOS_screen_get_char = 0xb4 ; ¯à®ç¨â âì (¢§ïâì) ᨬ¢®« á íªà
|
||||||
|
BIOS_screen_set_char = 0xb5 ; ãáâ ®¢¨âì ᨬ¢®« íªà ¥
|
||||||
|
BIOS_screen_move = 0xb7 ; ¯¥à¥¬¥é¥¨¥ ®ª (íªà )
|
||||||
14
format/include/head_short.inc
Executable file
14
format/include/head_short.inc
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
org Start_addr - (EXEHeader_end-EXEHeader)
|
||||||
|
|
||||||
|
EXEHeader:
|
||||||
|
|
||||||
|
db "EXE"
|
||||||
|
db 1
|
||||||
|
dw LoaderStart-EXEHeader
|
||||||
|
dw 0
|
||||||
|
dw Loader_End-LoaderStart
|
||||||
|
dw 0,0,0
|
||||||
|
dw LoaderStart
|
||||||
|
dw LoaderStart
|
||||||
|
dw 0xbfff
|
||||||
|
EXEHeader_end:
|
||||||
59
format/include/macro.s
Executable file
59
format/include/macro.s
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
MACRO SYS func
|
||||||
|
ld c,func
|
||||||
|
rst 0x10
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
MACRO PrintChars str_data_ptr ;㪠§ ⥫ì áâபã á ᨬ¢®« ¬¨
|
||||||
|
ld hl,str_data_ptr
|
||||||
|
SYS ESTEX_pchars
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
MACRO PrintChar char ;ᨬ¢®«
|
||||||
|
ld a,char
|
||||||
|
SYS ESTEX_pchar
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
macro BIOS function_code
|
||||||
|
ld c,function_code
|
||||||
|
rst 8
|
||||||
|
endm
|
||||||
|
|
||||||
|
;ACCELERATOR
|
||||||
|
|
||||||
|
macro ACC_ON
|
||||||
|
ld d,d
|
||||||
|
endm
|
||||||
|
|
||||||
|
macro ACC_OFF
|
||||||
|
ld b,b
|
||||||
|
endm
|
||||||
|
|
||||||
|
macro ACC_FILL
|
||||||
|
ld c,c
|
||||||
|
endm
|
||||||
|
|
||||||
|
macro ACC_FILL_GFX
|
||||||
|
ld e,e
|
||||||
|
endm
|
||||||
|
|
||||||
|
macro ACC_COPY
|
||||||
|
ld l,l
|
||||||
|
endm
|
||||||
|
|
||||||
|
macro ACC_COPY_GFX
|
||||||
|
ld a,a
|
||||||
|
endm
|
||||||
|
|
||||||
|
|
||||||
|
; macro DSS_OpenFile mode, filename
|
||||||
|
; ld hl,filename
|
||||||
|
; ld b,mode
|
||||||
|
; Estex fopen
|
||||||
|
; endm
|
||||||
|
|
||||||
|
; macro DSS_ReadFile dst, size
|
||||||
|
; ld hl,dst
|
||||||
|
; ld de,size
|
||||||
|
; Estex fread
|
||||||
|
; endm
|
||||||
22
format/make.bat
Executable file
22
format/make.bat
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
@echo off
|
||||||
|
if EXIST format.exe (
|
||||||
|
del format.exe
|
||||||
|
)
|
||||||
|
if EXIST format.lst (
|
||||||
|
del format.lst
|
||||||
|
)
|
||||||
|
|
||||||
|
REM ..\..\asm\build.exe
|
||||||
|
..\..\asm\sjasmplus.exe format.asm --lst=format.lst
|
||||||
|
if errorlevel 1 goto ERR
|
||||||
|
echo Ok!
|
||||||
|
goto END
|
||||||
|
|
||||||
|
:ERR
|
||||||
|
del format.exe
|
||||||
|
del format.lst
|
||||||
|
pause
|
||||||
|
echo ERROR...
|
||||||
|
goto END
|
||||||
|
|
||||||
|
:END
|
||||||
51
format/muldiv.asm
Executable file
51
format/muldiv.asm
Executable file
@ -0,0 +1,51 @@
|
|||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; DE = HLDE/BC, HL = HLDE%BC
|
||||||
|
;1456t
|
||||||
|
div32:
|
||||||
|
ld a,10h
|
||||||
|
.div321: sla e
|
||||||
|
rl d
|
||||||
|
adc hl,hl
|
||||||
|
jr c, .div322
|
||||||
|
sbc hl,bc
|
||||||
|
jr nc, .div323
|
||||||
|
add hl,bc
|
||||||
|
dec a
|
||||||
|
jr nz, .div321
|
||||||
|
ret
|
||||||
|
.div322: ccf
|
||||||
|
sbc hl,bc
|
||||||
|
.div323: inc de
|
||||||
|
dec a
|
||||||
|
jr nz, .div321
|
||||||
|
ret
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
;hlde=hlde/512 ;bc=Žáâ ⎪
|
||||||
|
div512: ld c,e ;ŹŤ ¤č¨Ľ 8 Ą¨â Žáâ âŞ
|
||||||
|
ld b,0
|
||||||
|
ld e,d
|
||||||
|
ld d,l
|
||||||
|
ld l,h
|
||||||
|
ld h,b ;ᤢ¨ăŤ¨ ¤ĽŤ¨âĽŤě 8 Ą¨â ˘Żŕ ˘Ž
|
||||||
|
srl l ;¨ Ľéń 1
|
||||||
|
rr d
|
||||||
|
rr e
|
||||||
|
rl b
|
||||||
|
ret
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
;====================================
|
||||||
|
; 16 bit multiply
|
||||||
|
;====================================
|
||||||
|
;mul16: ld hl,0
|
||||||
|
;mul_hlbc_de: ld a,b
|
||||||
|
; ld b,0x11
|
||||||
|
; jr .mul16_3
|
||||||
|
;.mul16_1: jr nc,.mul16_2
|
||||||
|
; add hl,de
|
||||||
|
;.mul16_2: rr h
|
||||||
|
; rr l
|
||||||
|
;.mul16_3: rra
|
||||||
|
; rr c
|
||||||
|
; djnz .mul16_1
|
||||||
|
; ld b,a
|
||||||
|
; ret
|
||||||
398
format/printf.asm
Executable file
398
format/printf.asm
Executable file
@ -0,0 +1,398 @@
|
|||||||
|
|
||||||
|
;universal color print to console procedure like printf()
|
||||||
|
;in: DE
|
||||||
|
cPrint: LD YH,D
|
||||||
|
LD YL,E
|
||||||
|
LD L,(IY) ; at iy we have pointer to format string
|
||||||
|
LD H,(IY+1)
|
||||||
|
|
||||||
|
loop: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CP '%'
|
||||||
|
JR Z,loc3
|
||||||
|
loc4: CALL outch
|
||||||
|
JP loop
|
||||||
|
|
||||||
|
loc3: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP '%'
|
||||||
|
JR Z,loc4
|
||||||
|
DEC HL
|
||||||
|
CALL scan_length ; scan [-][0][0-9*][lL]
|
||||||
|
loop1: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
|
||||||
|
CP 'x'
|
||||||
|
JP Z,prt_x1
|
||||||
|
CP 'X'
|
||||||
|
JP Z,prt_x2 ; hexadecimal
|
||||||
|
;
|
||||||
|
AND %1101'1111
|
||||||
|
;
|
||||||
|
CP 'D'
|
||||||
|
JP Z,prt_d ; signed decimal
|
||||||
|
CP 'U'
|
||||||
|
JP Z,prt_u ; unsigned decimal
|
||||||
|
CP 'L'
|
||||||
|
JP Z,prt_l
|
||||||
|
CP 'C'
|
||||||
|
JP Z,prt_c ; print single character
|
||||||
|
CP 'O'
|
||||||
|
JP Z,prt_o ; octal
|
||||||
|
CP 'S'
|
||||||
|
JP Z,prt_s ; string
|
||||||
|
JP loop
|
||||||
|
|
||||||
|
|
||||||
|
; %l - long
|
||||||
|
prt_l: LD (flong),A
|
||||||
|
INC HL
|
||||||
|
JP loop1
|
||||||
|
|
||||||
|
; %c symbol
|
||||||
|
prt_c: LD A,(iy+2)
|
||||||
|
CALL outch
|
||||||
|
; ld de,(nprtd+1)
|
||||||
|
; inc de
|
||||||
|
; ld (nprtd+1),de
|
||||||
|
prt_q: INC IY
|
||||||
|
INC IY
|
||||||
|
LD A,(flong)
|
||||||
|
OR A
|
||||||
|
JP Z,loop ; false
|
||||||
|
INC IY
|
||||||
|
INC IY
|
||||||
|
JP loop
|
||||||
|
|
||||||
|
; %s string
|
||||||
|
prt_s: LD A,' '
|
||||||
|
LD (padch),A
|
||||||
|
PUSH HL
|
||||||
|
PUSH IY
|
||||||
|
LD L,(iy+2)
|
||||||
|
LD H,(iy+3)
|
||||||
|
fmt0: PUSH HL
|
||||||
|
CALL _strlen
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(flen)
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR Z,fmt01
|
||||||
|
; call _pad
|
||||||
|
; or a
|
||||||
|
SBC HL,DE
|
||||||
|
LD (flen),HL
|
||||||
|
LD A,(fladj)
|
||||||
|
OR A
|
||||||
|
CALL Z,_pad
|
||||||
|
fmt01:
|
||||||
|
POP HL
|
||||||
|
fmt1: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
OR A
|
||||||
|
JR Z,fmt21
|
||||||
|
CALL outch
|
||||||
|
; ld de,(nprtd+1)
|
||||||
|
; inc de
|
||||||
|
; ld (nprtd+1),de
|
||||||
|
JP fmt1
|
||||||
|
|
||||||
|
fmt2:
|
||||||
|
LD HL,(flen)
|
||||||
|
LD A,(fladj)
|
||||||
|
OR A
|
||||||
|
CALL NZ,_pad
|
||||||
|
fmt21: POP IY
|
||||||
|
POP HL
|
||||||
|
JP prt_q
|
||||||
|
|
||||||
|
; %u unsigned decimal
|
||||||
|
prt_u: PUSH HL
|
||||||
|
PUSH IY
|
||||||
|
CALL getnum
|
||||||
|
JR fmt4
|
||||||
|
|
||||||
|
; %d signed decimal
|
||||||
|
prt_d: PUSH HL
|
||||||
|
PUSH IY
|
||||||
|
CALL getnum
|
||||||
|
LD A,(flong)
|
||||||
|
OR A
|
||||||
|
JR NZ,fmt3 ; true
|
||||||
|
BIT 7,H
|
||||||
|
JR Z,fmt3
|
||||||
|
LD DE,-1
|
||||||
|
fmt3: BIT 7,D
|
||||||
|
JR Z,fmt4
|
||||||
|
LD A,'-'
|
||||||
|
LD (sign),A
|
||||||
|
XOR A
|
||||||
|
SUB L
|
||||||
|
LD L,A
|
||||||
|
LD A,0
|
||||||
|
SBC A,H
|
||||||
|
LD H,A
|
||||||
|
LD A,0
|
||||||
|
SBC A,E
|
||||||
|
LD E,A
|
||||||
|
LD A,0
|
||||||
|
SBC A,D
|
||||||
|
LD D,A
|
||||||
|
fmt4: LD A,10 ; base
|
||||||
|
LD BC,char1
|
||||||
|
CALL mk_num
|
||||||
|
JP fmt0
|
||||||
|
|
||||||
|
; %o octal
|
||||||
|
prt_o: PUSH HL
|
||||||
|
PUSH IY
|
||||||
|
CALL getnum
|
||||||
|
LD A,8 ; base
|
||||||
|
LD BC,char1
|
||||||
|
CALL mk_num
|
||||||
|
JP fmt0
|
||||||
|
|
||||||
|
; %X hex
|
||||||
|
prt_x2: LD BC,char1
|
||||||
|
prt_x: PUSH HL
|
||||||
|
PUSH IY
|
||||||
|
CALL getnum
|
||||||
|
LD A,16 ; base
|
||||||
|
CALL mk_num
|
||||||
|
JP fmt0
|
||||||
|
|
||||||
|
; %x hex
|
||||||
|
prt_x1: LD BC,char2
|
||||||
|
JR prt_x
|
||||||
|
|
||||||
|
;---------------------------------------
|
||||||
|
getnum: XOR A
|
||||||
|
LD (sign),A
|
||||||
|
LD L,(iy+2)
|
||||||
|
LD H,(iy+3)
|
||||||
|
LD A,(flong)
|
||||||
|
OR A
|
||||||
|
JR Z,gnu1 ; false
|
||||||
|
LD E,(iy+4)
|
||||||
|
LD D,(iy+5)
|
||||||
|
RET
|
||||||
|
gnu1: LD DE,0
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
mk_num: LD (mn0+1),A ; base
|
||||||
|
LD (chars),BC
|
||||||
|
EXX
|
||||||
|
LD HL,number
|
||||||
|
EXX
|
||||||
|
CALL mn0
|
||||||
|
EXX
|
||||||
|
LD (HL),0
|
||||||
|
EXX
|
||||||
|
LD HL,number
|
||||||
|
LD A,(sign)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
DEC HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
mn0: LD BC,0x200a
|
||||||
|
XOR A
|
||||||
|
mn1: ADD HL,HL
|
||||||
|
RL E
|
||||||
|
RL D
|
||||||
|
RLA
|
||||||
|
CP C
|
||||||
|
JR C,mn2
|
||||||
|
SUB C
|
||||||
|
INC L
|
||||||
|
mn2: DJNZ mn1
|
||||||
|
; DEHL-quot; A-rem
|
||||||
|
PUSH AF
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
OR H
|
||||||
|
OR L
|
||||||
|
CALL NZ,mn0
|
||||||
|
POP AF
|
||||||
|
PUSH HL
|
||||||
|
chars+1: LD HL,char1 ; save char1 or char2
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
ADD HL,BC
|
||||||
|
LD A,(HL)
|
||||||
|
POP HL
|
||||||
|
EXX
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
EXX
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
scan_length:
|
||||||
|
XOR A
|
||||||
|
LD (flong),A ; false
|
||||||
|
LD (fladj),A
|
||||||
|
LD (flen+0),A ; make length = 0
|
||||||
|
LD (flen+1),A
|
||||||
|
LD A,' '
|
||||||
|
LD (padch),A ; space padding by default
|
||||||
|
LD A,(HL)
|
||||||
|
CP '-'
|
||||||
|
JR NZ,sl1
|
||||||
|
LD (fladj),A ; all will be LEFT adjusted, not right
|
||||||
|
INC HL
|
||||||
|
sl1: LD A,(HL)
|
||||||
|
CP '0'
|
||||||
|
JR NZ,sl2
|
||||||
|
LD A,(fladj)
|
||||||
|
OR A
|
||||||
|
JR NZ,sl1a
|
||||||
|
LD A,'0'
|
||||||
|
LD (padch),A ; pad numbers with '0's, not spaces
|
||||||
|
sl1a: INC HL
|
||||||
|
sl2: LD DE,0
|
||||||
|
sl2a: LD A,(HL)
|
||||||
|
SUB '0'
|
||||||
|
JR C,sl3
|
||||||
|
CP 9+1
|
||||||
|
JR NC,sl3
|
||||||
|
EX DE,HL
|
||||||
|
LD C,L
|
||||||
|
LD B,H
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,BC
|
||||||
|
ADD HL,HL
|
||||||
|
LD B,0
|
||||||
|
LD C,A
|
||||||
|
ADD HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
INC HL
|
||||||
|
JR sl2a
|
||||||
|
|
||||||
|
sl3: LD (flen),DE ; set explicit length
|
||||||
|
LD A,(HL)
|
||||||
|
CP 'l'
|
||||||
|
JR Z,sl4
|
||||||
|
CP 'L'
|
||||||
|
RET NZ
|
||||||
|
sl4: LD (flong),A ; true
|
||||||
|
INC HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
_pad: DEC HL
|
||||||
|
BIT 7,H
|
||||||
|
RET NZ
|
||||||
|
PUSH HL
|
||||||
|
LD A,(padch)
|
||||||
|
CALL outch
|
||||||
|
POP HL
|
||||||
|
; ld de,(nprtd+1)
|
||||||
|
; inc de
|
||||||
|
; ld (nprtd+1),de
|
||||||
|
JP _pad
|
||||||
|
|
||||||
|
|
||||||
|
_strlen: EX DE,HL
|
||||||
|
LD HL,0
|
||||||
|
.loop0: LD A,(DE)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
JR .loop0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;---------------------------------------
|
||||||
|
outch: PUSH IY
|
||||||
|
PUSH HL
|
||||||
|
CP cr
|
||||||
|
JP Z,.new_line
|
||||||
|
CP lf
|
||||||
|
JP Z,.prtNullX
|
||||||
|
CP tab
|
||||||
|
JP Z,.tabpr
|
||||||
|
CP col_cmd
|
||||||
|
JP Z,.set_attr
|
||||||
|
|
||||||
|
.next0: EX AF,AF
|
||||||
|
LD DE,(coords)
|
||||||
|
LD A,(print_attr)
|
||||||
|
LD B,A
|
||||||
|
EX AF,AF'
|
||||||
|
LD C,ESTEX_wrchar
|
||||||
|
RST 0x10
|
||||||
|
LD A,(coords)
|
||||||
|
INC A
|
||||||
|
CP 80 ;ª®®à¤¨ â ¯® X 0..79 (¨â®£® 80)
|
||||||
|
JR NC,.new_line ; ®¢ãî áâபã.
|
||||||
|
LD (coords),A
|
||||||
|
.end_pr: POP HL
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
.new_line: LD A,(coords+1) ;Y
|
||||||
|
CP 31
|
||||||
|
JR C,.noscroll
|
||||||
|
CALL .ScrollUP
|
||||||
|
JR .prtNullX
|
||||||
|
|
||||||
|
.noscroll: INC A
|
||||||
|
LD (coords+1),A ;y
|
||||||
|
|
||||||
|
.prtNullX: XOR A
|
||||||
|
LD (coords),A ;x
|
||||||
|
JR .end_pr
|
||||||
|
|
||||||
|
.ScrollUP: LD DE,0
|
||||||
|
LD HL,0x2050
|
||||||
|
LD BC,0x0155
|
||||||
|
XOR A
|
||||||
|
RST 0x10
|
||||||
|
RET
|
||||||
|
|
||||||
|
.tabpr: LD C,0x53
|
||||||
|
RST 0x10
|
||||||
|
INC E ;x++
|
||||||
|
LD A,E
|
||||||
|
ADD A,8
|
||||||
|
AND 0x78
|
||||||
|
LD E,A
|
||||||
|
LD (coords),DE
|
||||||
|
LD C,0x52 ; fix
|
||||||
|
RST 0x10
|
||||||
|
JP .end_pr
|
||||||
|
|
||||||
|
;Set attribute
|
||||||
|
.set_attr: LD A,(HL)
|
||||||
|
LD (print_attr),A
|
||||||
|
POP HL
|
||||||
|
POP IY
|
||||||
|
INC HL
|
||||||
|
RET
|
||||||
|
; jp .end_pr
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
char1: DB '0123456789ABCDEF'
|
||||||
|
char2: DB '0123456789abcdef'
|
||||||
|
|
||||||
|
|
||||||
|
flen: DW 0
|
||||||
|
fladj: DB 0
|
||||||
|
flong: DB 0 ; false/true
|
||||||
|
padch: DB ' '
|
||||||
|
|
||||||
|
sign: DB 0 ; § ª ç¨á«
|
||||||
|
number: DS 16 ; ¡ãä¥à ç¨á«
|
||||||
|
|
||||||
|
coords: DW 0
|
||||||
|
print_attr: DB 7
|
||||||
|
|
||||||
|
|
||||||
BIN
format/x86_boot.bin
Executable file
BIN
format/x86_boot.bin
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user