progress on FAT16 support
This commit is contained in:
@@ -1,21 +1,55 @@
|
||||
; VARS
|
||||
|
||||
MEM_FAT_RESERVED .EQU MEM_IDE_BASE + 10 ; Reserved sectors (2byte)
|
||||
MEM_FAT_AMOUNT .EQU MEM_IDE_BASE + 12 ; Amount of FATs (1byte)
|
||||
MEM_FAT_SECTORS .EQU MEM_IDE_BASE + 13 ; Length of FAT (2byte)
|
||||
phase MEM_IDE_FSBUFFER
|
||||
MEM_FAT_RESERVED: ; Reserved sectors (2byte)
|
||||
defs 2
|
||||
MEM_FAT_AMOUNT: ; Amount of FATs (1byte)
|
||||
defs 1
|
||||
MEM_FAT_SECTORS: ; Length of FAT (2byte)
|
||||
defs 2
|
||||
MEM_FAT_COUNT1: ; Counter Var for reading FAT (2byte)
|
||||
defs 1
|
||||
MEM_FAT_TMPPOINTER: ; Temporary working pointer
|
||||
defs 4
|
||||
MEM_FAT_TMPPOINTER1: ; Temporary working pointer
|
||||
defs 4
|
||||
MEM_FAT_TMPFNAME: ; Temporary filename
|
||||
defs 16
|
||||
|
||||
MEM_FAT_COUNT1 .EQU MEM_IDE_BASE + 15 ;Counter Var for reading FAT (2byte)
|
||||
MEM_FAT_OF0_CCLUST: ;Current cluster of file
|
||||
defw 0
|
||||
MEM_FAT_OF0_FATSEC: ;Current sector in FAT
|
||||
defs 4
|
||||
MEM_FAT_OF0_DATSEC: ;Current sector in Data
|
||||
defs 4
|
||||
MEM_FAT_OF0_DATREM: ;Remaining sector in Data
|
||||
defs 2
|
||||
|
||||
|
||||
dephase
|
||||
|
||||
;-------------------------------------
|
||||
; Get FAT Root-Table position
|
||||
;-------------------------------------
|
||||
fat_get_root_table:
|
||||
call fat_reset_pointer ;reset fat pointer
|
||||
|
||||
;call fat_print_dbg
|
||||
; Load first sector on active partition
|
||||
LD HL, MEM_IDE_PARTITION ; pointer to LBA address
|
||||
LD HL, MEM_IDE_POINTER ; pointer to LBA address
|
||||
LD A,1 ;read 1 sector
|
||||
call read_lba_sector
|
||||
|
||||
; check for valid Boot sector
|
||||
ld a,(MEM_IDE_BUFFER)
|
||||
cp 0xEB ;first byte should be 0xEB
|
||||
jp nz, _fat_get_root_table_invalid
|
||||
|
||||
;debug sector
|
||||
;ld hl, MEM_IDE_BUFFER
|
||||
;ld b,20
|
||||
;call dump_pretty
|
||||
|
||||
; Read and store FS Properties
|
||||
LD IX,MEM_IDE_BUFFER
|
||||
LD A,(IX+0x0E)
|
||||
@@ -53,35 +87,54 @@ _fat_get_root_table_loop: ; multiply
|
||||
call _fat_math_sector_add_16
|
||||
ret
|
||||
|
||||
_fat_get_root_table_invalid:
|
||||
call PRINTINLINE
|
||||
db 10,13,"Cannot find boot sector.",10,13,0
|
||||
call ideif_get_drv_pointer
|
||||
ld (ix+0),0x02
|
||||
ret
|
||||
|
||||
;-------------------------------------
|
||||
; Print current fat directory of MEM_IDE_POINTER
|
||||
;-------------------------------------
|
||||
fat_print_directory:
|
||||
LD A,10 ;New line
|
||||
CALL print_char
|
||||
LD A,13
|
||||
CALL print_char
|
||||
|
||||
|
||||
LD DE,(MEM_FAT_SECTORS)
|
||||
LD (MEM_FAT_COUNT1),DE
|
||||
LD HL,MEM_IDE_POINTER ;read first sector
|
||||
LD B,1
|
||||
call read_lba_sector
|
||||
|
||||
call PRINTINLINE
|
||||
db 10,13," Filename Cluster Size",10,13,0
|
||||
|
||||
LD HL, MEM_IDE_BUFFER ;set buffer start
|
||||
LD C,16 ;set entries counter
|
||||
|
||||
_fat_print_directory_loop: ;loop over each entry (32byte)
|
||||
LD A,(HL) ; check first byte
|
||||
PUSH HL ;backup start of entry
|
||||
POP IX
|
||||
PUSH HL
|
||||
;ignore unwanted entries
|
||||
CP 0x41 ;skip invisible
|
||||
JR Z, _fat_print_directory_loop_next
|
||||
JP Z, _fat_print_directory_loop_next
|
||||
CP 0xE5 ;skip deleted
|
||||
JR Z, _fat_print_directory_loop_next
|
||||
JP Z, _fat_print_directory_loop_next
|
||||
CP 0x00 ;reached end
|
||||
JP Z, _fat_print_directory_loop_break
|
||||
|
||||
;check file attribute
|
||||
ld a,(IX+0x0B)
|
||||
cp 0x10 ;if subdirectors
|
||||
jp z, _fat_print_directory_dir ;print dir
|
||||
;else print file
|
||||
_fat_print_directory_loop_file
|
||||
;print filename
|
||||
ld a,' '
|
||||
call print_char
|
||||
ld a,' '
|
||||
call print_char
|
||||
LD B,8
|
||||
call print_str_fixed
|
||||
ld A,'.'
|
||||
@@ -89,14 +142,49 @@ _fat_print_directory_loop: ;loop over each entry (32byte)
|
||||
LD B,3
|
||||
call print_str_fixed
|
||||
|
||||
LD A,(HL) ; print attribute
|
||||
call print_char
|
||||
call PRINTINLINE
|
||||
db " 0x",0
|
||||
;first cluster number
|
||||
ld a,(ix+0x1B)
|
||||
call print_a_hex
|
||||
ld a,(ix+0x1A)
|
||||
call print_a_hex
|
||||
call PRINTINLINE
|
||||
db " 0x",0
|
||||
ld a,(ix+0x1F)
|
||||
call print_a_hex
|
||||
ld a,(ix+0x1E)
|
||||
call print_a_hex
|
||||
ld a,(ix+0x1D)
|
||||
call print_a_hex
|
||||
ld a,(ix+0x1C)
|
||||
call print_a_hex
|
||||
|
||||
LD A,10 ;New line
|
||||
CALL print_char
|
||||
LD A,13
|
||||
CALL print_char
|
||||
|
||||
jr _fat_print_directory_loop_next
|
||||
_fat_print_directory_dir
|
||||
ld a,'D'
|
||||
call print_char
|
||||
ld a,' '
|
||||
call print_char
|
||||
LD B,8
|
||||
call print_str_fixed
|
||||
call PRINTINLINE
|
||||
db " 0x",0
|
||||
;first cluster number
|
||||
ld a,(ix+0x1B)
|
||||
call print_a_hex
|
||||
ld a,(ix+0x1A)
|
||||
call print_a_hex
|
||||
|
||||
LD A,10 ;New line
|
||||
CALL print_char
|
||||
LD A,13
|
||||
CALL print_char
|
||||
jr _fat_print_directory_loop_next
|
||||
|
||||
_fat_print_directory_loop_next: ; read next entry
|
||||
DEC C ;next sector after 32 entries
|
||||
@@ -130,12 +218,12 @@ _fat_print_directory_loop_next_sector: ; end fo sector. read next sector from d
|
||||
_fat_print_directory_loop_break
|
||||
POP HL
|
||||
_fat_print_directory_loop_break_dirty
|
||||
ld hl, [str_sum]
|
||||
call print_str ;print
|
||||
ld a,c
|
||||
call print_a_hex
|
||||
ld hl, [str_files]
|
||||
call print_str ;print
|
||||
; ld hl, [str_sum]
|
||||
; call print_str ;print
|
||||
; ld a,c
|
||||
; call print_a_hex
|
||||
; ld hl, [str_files]
|
||||
; call print_str ;print
|
||||
ret
|
||||
|
||||
;-------------------------------------
|
||||
@@ -145,7 +233,7 @@ _fat_print_directory_loop_break_dirty
|
||||
;-------------------------------------
|
||||
fat_lfs:
|
||||
PUSH DE
|
||||
LD HL,MEM_IDE_BASE + 17 ; prepare filename
|
||||
LD HL,[MEM_FAT_TMPFNAME] ; prepare filename
|
||||
CALL format_filename_fat16
|
||||
|
||||
LD A,16 ;init counter for FAT sectors
|
||||
@@ -216,27 +304,79 @@ _fat_lfs_loop_compare_match:
|
||||
; 32 Bit addition to pointer
|
||||
; HL has value
|
||||
_fat_math_sector_add_16:
|
||||
LD IX,MEM_IDE_POINTER; LOAD IX to sector pointer in memory
|
||||
LD A,L
|
||||
ADD A,(IX+3)
|
||||
LD (IX+3),A
|
||||
JR NC, _fat_math_sector_add_16_2 ;if no carry, continue
|
||||
LD A,1
|
||||
ADD A,(IX+2)
|
||||
_fat_math_sector_add_16_2:
|
||||
LD A,h
|
||||
ADD A,(IX+2)
|
||||
LD (IX+2),A
|
||||
RET NC ;done when no carry
|
||||
LD A,1
|
||||
ADD A,(IX+1)
|
||||
LD (IX+1),A
|
||||
RET
|
||||
ld (MEM_FAT_TMPPOINTER), hl
|
||||
xor a
|
||||
ld (MEM_FAT_TMPPOINTER+2),a
|
||||
ld (MEM_FAT_TMPPOINTER+3),a
|
||||
|
||||
; reset LBA pointer to first sector in partition
|
||||
ld de,[MEM_FAT_TMPPOINTER]
|
||||
ld bc,[MEM_IDE_POINTER]
|
||||
call _fat_math_add32
|
||||
ret
|
||||
|
||||
;bc contains pointer to a (also result)
|
||||
;de contains pointer to b
|
||||
_fat_math_add32
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
ld a,(de) ; load lower 16bit for B int from (DE) to HL
|
||||
ld l,a
|
||||
inc de
|
||||
ld a,(de)
|
||||
ld h,a
|
||||
inc de
|
||||
; HL, DE dirty
|
||||
ld a,(bc) ; load lower 16bit for A int from (BC) to DE
|
||||
ld e,a
|
||||
inc bc
|
||||
ld a,(bc)
|
||||
ld d,a
|
||||
; HL now contains A, DE now contains D
|
||||
add hl,de ;add lower bytes, store carry
|
||||
pop de ;restore pointers
|
||||
pop bc ;both now cointain first byte of long-value
|
||||
ld a,l ;store lower result in (bc)
|
||||
ld (bc),a
|
||||
inc bc
|
||||
ld a,h
|
||||
ld (bc),a
|
||||
inc bc
|
||||
inc de ;also increment de to next byte
|
||||
inc de
|
||||
; DE and HL now start at the upper byte
|
||||
push bc
|
||||
push de
|
||||
ld a,(de) ; load upper 16bit for B
|
||||
ld l,a
|
||||
inc de
|
||||
ld a,(de)
|
||||
ld h,a
|
||||
inc de
|
||||
ld a,(bc) ; load upper 16bit for A
|
||||
ld e,a
|
||||
inc bc
|
||||
ld a,(bc)
|
||||
ld d,a
|
||||
adc hl,de ;add upper bytes, store carry
|
||||
pop de
|
||||
pop bc
|
||||
ld a,l ;store lower result in (bc)
|
||||
ld(bc),a
|
||||
inc bc
|
||||
ld a,h
|
||||
ld(bc),a
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; reset LBA pointer to first sector in selected partition
|
||||
fat_reset_pointer:
|
||||
LD HL,MEM_IDE_PARTITION
|
||||
LD DE,MEM_IDE_POINTER
|
||||
call ideif_get_drv_pointer
|
||||
inc ix
|
||||
inc ix
|
||||
push ix
|
||||
pop hl ;copy poiter to hl
|
||||
ld de, MEM_IDE_POINTER
|
||||
jr fat_copy_lba_pointer
|
||||
|
||||
; resets LBA pointer (4-byte) to partition start
|
||||
@@ -318,5 +458,5 @@ _format_filename_fat16_loop_copy:
|
||||
str_file_notfound:
|
||||
db "File not found!",13,10,0
|
||||
|
||||
str_file_found:
|
||||
str_file_found:
|
||||
db " File located!",13,10,0
|
||||
69
OperatingSystem/software/include/fat16_file.s
Normal file
69
OperatingSystem/software/include/fat16_file.s
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
|
||||
;1. find sector for given cluster
|
||||
;2. read sector
|
||||
;3. store first data sector to MEM_FAT_OF0_DATSEC
|
||||
;4. set MEM_FAT_OF0_DATREM to amount uf sectors per cluster
|
||||
;5. find next cluster in FAt and update MEM_FAT_OF0_CCLUST
|
||||
|
||||
|
||||
; gets sector in FAT table for the cluster stored in MEM_FAT_OF0_CCLUST
|
||||
; store result in MEM_FAT_OF0_FATSEC
|
||||
; stores next cluster in MEM_FAT_OF0_CCLUST
|
||||
fat_getfatsec:
|
||||
ld HL,(MEM_FAT_OF0_CCLUST) ;load cluster
|
||||
;each sector contains 256 clusters
|
||||
;first 8bits are not needed (/256)
|
||||
|
||||
ld a,h ;divide by 256
|
||||
ld l,a
|
||||
xor a
|
||||
ld h,a
|
||||
|
||||
ld bc,(MEM_FAT_RESERVED) ;add reserved sectors
|
||||
add hl,bc
|
||||
ld(MEM_FAT_OF0_FATSEC+0),hl;store sector to MEM_FAT_TMPPOINTER1
|
||||
xor a
|
||||
ld(MEM_FAT_OF0_FATSEC+2),a
|
||||
ld(MEM_FAT_OF0_FATSEC+3),a
|
||||
|
||||
call ideif_get_drv_pointer
|
||||
inc ix
|
||||
inc ix
|
||||
push ix
|
||||
pop de ;copy poiter to hl
|
||||
ld bc,[MEM_FAT_OF0_FATSEC]
|
||||
call _fat_math_add32 ;MEM_FAT_OF0_FATSEC now contains the correct sector
|
||||
;in the FAT
|
||||
|
||||
call fat_print_dbg
|
||||
|
||||
;read FAT sector
|
||||
ld hl,MEM_FAT_OF0_FATSEC ;read next sector
|
||||
ld b,1
|
||||
call read_lba_sector
|
||||
|
||||
ld hl, MEM_IDE_BUFFER
|
||||
ld b,20
|
||||
call dump_pretty
|
||||
|
||||
;calculate offset address
|
||||
ld a,(MEM_FAT_OF0_CCLUST)
|
||||
RLA ;shift to left (x2)
|
||||
ld l, a
|
||||
ld a,0
|
||||
RLA ;shift in carry flag
|
||||
ld h,a
|
||||
ld de,MEM_IDE_BUFFER
|
||||
add hl,de
|
||||
;copy pointer
|
||||
ld de,MEM_FAT_OF0_CCLUST
|
||||
ldi ;copy byte for next cluster from FAT
|
||||
ldi
|
||||
|
||||
|
||||
call fat_print_dbg
|
||||
|
||||
ret
|
||||
;store data
|
||||
|
||||
@@ -1,141 +1,170 @@
|
||||
.include "extern_symbols.s" ;include monitor symbols.
|
||||
org 0xB000
|
||||
;Testing code
|
||||
org 0x8000
|
||||
|
||||
;LD HL,MEM_IDE_BUFFER
|
||||
;LD B,32
|
||||
;call dump_pretty
|
||||
call find_partition
|
||||
;call fat_get_root_table
|
||||
;call fat_print_directory
|
||||
sel_dsk:
|
||||
call ideif_drv_sel
|
||||
call fat_print_dbg
|
||||
ret
|
||||
|
||||
call fat_get_root_table
|
||||
LD DE, [str1]
|
||||
CALL fat_lfs
|
||||
org 0x8010
|
||||
call fat_print_dbg
|
||||
ret
|
||||
|
||||
org 0x8020
|
||||
call fat_print_directory
|
||||
ret
|
||||
|
||||
org 0x8030
|
||||
ld hl,0x0006
|
||||
ld (MEM_FAT_OF0_CCLUST),hl
|
||||
call fat_getfatsec
|
||||
ret
|
||||
|
||||
fat_print_dbg:
|
||||
call PRINTINLINE
|
||||
db 10,13,"PTR.MEM_IDE_POINTER: 0x",0
|
||||
ld ix,MEM_IDE_POINTER
|
||||
call print_32_hex
|
||||
call PRINTINLINE
|
||||
db " | PTR.MEM_IDE_PARTITION: 0x",0
|
||||
ld ix,MEM_IDE_PARTITION
|
||||
call print_32_hex
|
||||
|
||||
call PRINTINLINE
|
||||
db 10,13,"PTR.MEM_FAT_TMPPOINTER: 0x",0
|
||||
ld ix,MEM_FAT_TMPPOINTER
|
||||
call print_32_hex
|
||||
call PRINTINLINE
|
||||
db " | PTR.MEM_FAT_TMPPOINTER1: 0x",0
|
||||
ld ix,MEM_FAT_TMPPOINTER1
|
||||
call print_32_hex
|
||||
|
||||
call PRINTINLINE
|
||||
db 10,13,"VAL.MEM_FAT_RESERVED: 0x",0
|
||||
ld ix,MEM_FAT_RESERVED
|
||||
call print_16_hex
|
||||
call PRINTINLINE
|
||||
db " | VAL.MEM_FAT_AMOUNT: 0x",0
|
||||
ld a,(MEM_FAT_AMOUNT)
|
||||
call print_a_hex
|
||||
|
||||
call PRINTINLINE
|
||||
db 10,13,"VAL.MEM_FAT_SECTORS: 0x",0
|
||||
ld ix,MEM_FAT_SECTORS
|
||||
call print_16_hex
|
||||
call PRINTINLINE
|
||||
db " | VAL.MEM_FAT_COUNT1: 0x",0
|
||||
ld a,(MEM_FAT_COUNT1)
|
||||
call print_a_hex
|
||||
|
||||
call PRINTINLINE
|
||||
db 10,13,"VAL.MEM_FAT_OF0_CCLUST: 0x",0
|
||||
ld ix,MEM_FAT_OF0_CCLUST
|
||||
call print_16_hex
|
||||
call PRINTINLINE
|
||||
db " | PTR.MEM_FAT_OF0_FATSEC: 0x",0
|
||||
ld ix,MEM_FAT_OF0_FATSEC
|
||||
call print_32_hex
|
||||
|
||||
call PRINTINLINE
|
||||
db 10,13,"VAL.MEM_FAT_OF0_DATSEC: 0x",0
|
||||
ld ix,MEM_FAT_OF0_DATSEC
|
||||
call print_32_hex
|
||||
call PRINTINLINE
|
||||
db " | PTR.MEM_FAT_OF0_DATREM: 0x",0
|
||||
ld ix,MEM_FAT_OF0_DATREM
|
||||
call print_16_hex
|
||||
|
||||
call print_newLine
|
||||
ret
|
||||
|
||||
print_32_hex:
|
||||
ld a,(ix+3)
|
||||
call print_a_hex
|
||||
ld a,(ix+2)
|
||||
call print_a_hex
|
||||
ld a,(ix+1)
|
||||
call print_a_hex
|
||||
ld a,(ix+0)
|
||||
call print_a_hex
|
||||
ret
|
||||
|
||||
print_16_hex:
|
||||
ld a,(ix+1)
|
||||
call print_a_hex
|
||||
ld a,(ix+0)
|
||||
call print_a_hex
|
||||
ret
|
||||
|
||||
; a contains drive to select
|
||||
; populate fs vars as well
|
||||
ideif_drv_sel:
|
||||
ld (MEM_IDE_SELECTED),a
|
||||
push af
|
||||
call ideif_get_drv_pointer ;test if drive is marked as available
|
||||
ld a,(ix+0)
|
||||
or a
|
||||
jp nz, _ideif_drv_sel_fail ;if not-> fail
|
||||
|
||||
JP PROMPT_BEGIN
|
||||
call fat_get_root_table ;else get root table
|
||||
;backup tmp pointer
|
||||
ld hl,(MEM_IDE_POINTER)
|
||||
ld de,(MEM_IDE_PARTITION) ;use MEM_IDE_PARTITION to backup the pointer
|
||||
call fat_copy_lba_pointer
|
||||
ld hl,[_ideif_drv_sel_pstr] ;print success message
|
||||
call print_str
|
||||
pop af
|
||||
add 69
|
||||
call print_char
|
||||
ld hl,[_ideif_drv_sel_sstr0]
|
||||
call print_str
|
||||
ret
|
||||
_ideif_drv_sel_fail:
|
||||
ld hl,[_ideif_drv_sel_pstr]
|
||||
call print_str
|
||||
pop af
|
||||
add 69
|
||||
call print_char
|
||||
ld hl,[_ideif_drv_sel_fstr0]
|
||||
call print_str
|
||||
LD DE,0x20
|
||||
LD BC,0x70
|
||||
CALL beep
|
||||
ret
|
||||
|
||||
str1:
|
||||
db "ILLUSION.PSG",0
|
||||
str2:
|
||||
db "HALLOWLT.TXT",0
|
||||
str3:
|
||||
db "TEST",0
|
||||
str4:
|
||||
db ".ORG",0
|
||||
_ideif_drv_sel_pstr:
|
||||
db 10,13,"Drive ",0
|
||||
_ideif_drv_sel_fstr0:
|
||||
db ": not ready",10,13,0
|
||||
_ideif_drv_sel_sstr0:
|
||||
db ": selected",10,13,0
|
||||
_ideif_drv_sel_syn:
|
||||
db 10,13,"Invalid drive letter",10,13,0
|
||||
.include "fat16.s" ;include monitor symbols.
|
||||
.include "fat16_file.s" ;include monitor symbols.
|
||||
|
||||
delay_small:
|
||||
PUSH AF
|
||||
POP AF
|
||||
PUSH AF
|
||||
POP AF
|
||||
RET
|
||||
|
||||
find_partition:
|
||||
;read bootsector
|
||||
LD A,1 ;read 1 sector
|
||||
LD B,IDE_REG_SECTOR
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,1 ;read sector 0
|
||||
LD B,IDE_REG_SSECTOR
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,0 ;read cylinder 0
|
||||
LD B,IDE_REG_LCYL
|
||||
CALL ide_regwrite_8
|
||||
LD A,0
|
||||
LD B,IDE_REG_HCYL
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,10100000b ;read head 0
|
||||
LD B,IDE_REG_HEAD
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,IDE_CMD_READSEC ;send read command
|
||||
LD B,IDE_REG_CMDSTS
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD HL,MEM_IDE_BUFFER ;set read/write buffer start address
|
||||
call ide_readsector_512_inv ;read 256 words from device
|
||||
|
||||
LD B,4 ;Partition table length
|
||||
LD C,0 ;Partition ID counter
|
||||
LD IX,MEM_IDE_BUFFER+446 ;Load offest of first partition table entry
|
||||
find_partition_loop:
|
||||
LD A,(IX+4) ;load status byte
|
||||
OR A
|
||||
JP NZ, find_partition_process ;If not zero, jump to print function
|
||||
jp find_partition_next
|
||||
|
||||
find_partition_next:
|
||||
LD A,10 ;New line
|
||||
CALL print_char
|
||||
LD A,13
|
||||
CALL print_char
|
||||
LD DE,16
|
||||
ADD IX,DE
|
||||
DJNZ find_partition_loop
|
||||
RET
|
||||
|
||||
find_partition_process: ; process table entry
|
||||
ld hl, [str_part_seek_1]
|
||||
call print_str ;print
|
||||
LD A,(IX+0x04) ;load type
|
||||
call print_a_hex
|
||||
LD A,(IX+0x04) ;load type
|
||||
CP 0x0E
|
||||
JR NZ, find_partition_next
|
||||
|
||||
ld hl, [str_part_seek_2]
|
||||
call print_str ;print
|
||||
ld hl, [str_part_seek_3]
|
||||
call print_str ;print
|
||||
|
||||
LD A,(IX+0x08) ;load start LBA
|
||||
LD (MEM_IDE_PARTITION+3),A
|
||||
LD A,(IX+0x09) ;load start LBA
|
||||
LD (MEM_IDE_PARTITION+2),A
|
||||
LD A,(IX+0x0A) ;load start LBA
|
||||
LD (MEM_IDE_PARTITION+1),A
|
||||
LD A,(IX+0x0B) ;load start LBA
|
||||
LD (MEM_IDE_PARTITION+0),A
|
||||
|
||||
LD A,(MEM_IDE_PARTITION+3)
|
||||
call print_a_hex
|
||||
LD A,(MEM_IDE_PARTITION+2)
|
||||
call print_a_hex
|
||||
LD A,(MEM_IDE_PARTITION+1)
|
||||
call print_a_hex
|
||||
LD A,(MEM_IDE_PARTITION+0)
|
||||
call print_a_hex
|
||||
ld hl, [str_part_seek_4]
|
||||
call print_str ;print
|
||||
LD A,(IX+0x0C) ;load count LBA
|
||||
call print_a_hex
|
||||
LD A,(IX+0x0D) ;load count LBA
|
||||
call print_a_hex
|
||||
LD A,(IX+0x0E) ;load count LBA
|
||||
call print_a_hex
|
||||
LD A,(IX+0x0F) ;load count LBA
|
||||
call print_a_hex
|
||||
LD A,10 ;New line
|
||||
CALL print_char
|
||||
LD A,13
|
||||
CALL print_char
|
||||
RET
|
||||
|
||||
str_part_seek_1:
|
||||
db "- Type: 0x",0
|
||||
str_part_seek_2:
|
||||
db " State: ",0
|
||||
str_part_seek_3:
|
||||
db " LBA: 0x",0
|
||||
str_part_seek_4:
|
||||
db " Len: 0x",0
|
||||
str_sum:
|
||||
db "------------",10,13,0
|
||||
str_files:
|
||||
db " Files",10,13,0
|
||||
|
||||
.include "include/fat16.s"
|
||||
;------------------------------------------------------------------------------
|
||||
; PRINTINLINE
|
||||
;
|
||||
; String output function
|
||||
;
|
||||
; Prints in-line data (bytes immediately following the PRINTINLINE call)
|
||||
; until a string terminator is encountered (0 - null char).
|
||||
;------------------------------------------------------------------------------
|
||||
PRINTINLINE:
|
||||
EX (SP),HL ; PUSH HL and put RET ADDress into HL
|
||||
PUSH AF
|
||||
PUSH BC
|
||||
nxtILC:
|
||||
LD A,(HL)
|
||||
CP 0
|
||||
JR Z,endPrint
|
||||
CALL print_char
|
||||
INC HL
|
||||
JR nxtILC
|
||||
endPrint:
|
||||
INC HL ; Get past "null" terminator
|
||||
POP BC
|
||||
POP AF
|
||||
EX (SP),HL ; PUSH new RET ADDress on stack and restore HL
|
||||
RET
|
||||
141
OperatingSystem/software/test_old.asm
Normal file
141
OperatingSystem/software/test_old.asm
Normal file
@@ -0,0 +1,141 @@
|
||||
.include "extern_symbols.s" ;include monitor symbols.
|
||||
org 0xB000
|
||||
;Testing code
|
||||
|
||||
;LD HL,MEM_IDE_BUFFER
|
||||
;LD B,32
|
||||
;call dump_pretty
|
||||
call find_partition
|
||||
;call fat_get_root_table
|
||||
;call fat_print_directory
|
||||
|
||||
call fat_get_root_table
|
||||
LD DE, [str1]
|
||||
CALL fat_lfs
|
||||
|
||||
JP PROMPT_BEGIN
|
||||
|
||||
str1:
|
||||
db "ILLUSION.PSG",0
|
||||
str2:
|
||||
db "HALLOWLT.TXT",0
|
||||
str3:
|
||||
db "TEST",0
|
||||
str4:
|
||||
db ".ORG",0
|
||||
|
||||
delay_small:
|
||||
PUSH AF
|
||||
POP AF
|
||||
PUSH AF
|
||||
POP AF
|
||||
RET
|
||||
|
||||
find_partition:
|
||||
;read bootsector
|
||||
LD A,1 ;read 1 sector
|
||||
LD B,IDE_REG_SECTOR
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,1 ;read sector 0
|
||||
LD B,IDE_REG_SSECTOR
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,0 ;read cylinder 0
|
||||
LD B,IDE_REG_LCYL
|
||||
CALL ide_regwrite_8
|
||||
LD A,0
|
||||
LD B,IDE_REG_HCYL
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,10100000b ;read head 0
|
||||
LD B,IDE_REG_HEAD
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,IDE_CMD_READSEC ;send read command
|
||||
LD B,IDE_REG_CMDSTS
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD HL,MEM_IDE_BUFFER ;set read/write buffer start address
|
||||
call ide_readsector_512_inv ;read 256 words from device
|
||||
|
||||
LD B,4 ;Partition table length
|
||||
LD C,0 ;Partition ID counter
|
||||
LD IX,MEM_IDE_BUFFER+446 ;Load offest of first partition table entry
|
||||
find_partition_loop:
|
||||
LD A,(IX+4) ;load status byte
|
||||
OR A
|
||||
JP NZ, find_partition_process ;If not zero, jump to print function
|
||||
jp find_partition_next
|
||||
|
||||
find_partition_next:
|
||||
LD A,10 ;New line
|
||||
CALL print_char
|
||||
LD A,13
|
||||
CALL print_char
|
||||
LD DE,16
|
||||
ADD IX,DE
|
||||
DJNZ find_partition_loop
|
||||
RET
|
||||
|
||||
find_partition_process: ; process table entry
|
||||
ld hl, [str_part_seek_1]
|
||||
call print_str ;print
|
||||
LD A,(IX+0x04) ;load type
|
||||
call print_a_hex
|
||||
LD A,(IX+0x04) ;load type
|
||||
CP 0x0E
|
||||
JR NZ, find_partition_next
|
||||
|
||||
ld hl, [str_part_seek_2]
|
||||
call print_str ;print
|
||||
ld hl, [str_part_seek_3]
|
||||
call print_str ;print
|
||||
|
||||
LD A,(IX+0x08) ;load start LBA
|
||||
LD (MEM_IDE_PARTITION+3),A
|
||||
LD A,(IX+0x09) ;load start LBA
|
||||
LD (MEM_IDE_PARTITION+2),A
|
||||
LD A,(IX+0x0A) ;load start LBA
|
||||
LD (MEM_IDE_PARTITION+1),A
|
||||
LD A,(IX+0x0B) ;load start LBA
|
||||
LD (MEM_IDE_PARTITION+0),A
|
||||
|
||||
LD A,(MEM_IDE_PARTITION+3)
|
||||
call print_a_hex
|
||||
LD A,(MEM_IDE_PARTITION+2)
|
||||
call print_a_hex
|
||||
LD A,(MEM_IDE_PARTITION+1)
|
||||
call print_a_hex
|
||||
LD A,(MEM_IDE_PARTITION+0)
|
||||
call print_a_hex
|
||||
ld hl, [str_part_seek_4]
|
||||
call print_str ;print
|
||||
LD A,(IX+0x0C) ;load count LBA
|
||||
call print_a_hex
|
||||
LD A,(IX+0x0D) ;load count LBA
|
||||
call print_a_hex
|
||||
LD A,(IX+0x0E) ;load count LBA
|
||||
call print_a_hex
|
||||
LD A,(IX+0x0F) ;load count LBA
|
||||
call print_a_hex
|
||||
LD A,10 ;New line
|
||||
CALL print_char
|
||||
LD A,13
|
||||
CALL print_char
|
||||
RET
|
||||
|
||||
str_part_seek_1:
|
||||
db "- Type: 0x",0
|
||||
str_part_seek_2:
|
||||
db " State: ",0
|
||||
str_part_seek_3:
|
||||
db " LBA: 0x",0
|
||||
str_part_seek_4:
|
||||
db " Len: 0x",0
|
||||
str_sum:
|
||||
db "------------",10,13,0
|
||||
str_files:
|
||||
db " Files",10,13,0
|
||||
|
||||
.include "include/fat16.s"
|
||||
Binary file not shown.
@@ -1,51 +1,99 @@
|
||||
:10B00000CD38B0CD42B1110FB0CD1AB2C3990049BD
|
||||
:10B010004C4C5553494F4E2E5053470048414C4CD1
|
||||
:10B020004F574C542E5458540054455354002E4FEF
|
||||
:10B03000524700F5F1F5F1C93E01060ACDB3103EC5
|
||||
:10B0400001060BCDB3103E00060CCDB3103E00063A
|
||||
:10B050000DCDB3103EA0060ECDB3103E20060FCD91
|
||||
:10B06000B310214150CD1D1106040E00DD21FF510A
|
||||
:10B07000DD7E04B7C28CB0C37AB03E0ACDB7023EC3
|
||||
:10B080000DCDB702111000DD1910E5C92104B1CDB5
|
||||
:10B09000BF02DD7E04CDE702DD7E04FE0E20DB2153
|
||||
:10B0A0000FB1CDBF022118B1CDBF02DD7E08320540
|
||||
:10B0B00050DD7E09320450DD7E0A320350DD7E0B06
|
||||
:10B0C0003202503A0550CDE7023A0450CDE7023A39
|
||||
:10B0D0000350CDE7023A0250CDE7022121B1CDBFA6
|
||||
:10B0E00002DD7E0CCDE702DD7E0DCDE702DD7E0EBA
|
||||
:10B0F000CDE702DD7E0FCDE7023E0ACDB7023E0D61
|
||||
:10B10000CDB702C92D20547970653A2030780020DF
|
||||
:10B1100053746174653A2000204C42413A203078E3
|
||||
:10B1200000204C656E3A203078002D2D2D2D2D2DD0
|
||||
:10B130002D2D2D2D2D2D0A0D002046696C65730ACD
|
||||
:10B140000D00CDA7B22102503E01CD5612DD2141A6
|
||||
:10B1500050DD7E0E320A50DD7E0F320B50DD7E1048
|
||||
:10B16000320C50DD7E16320D50DD7E17320E503A15
|
||||
:10B170000E50573A0D505FAF676F3A0C5047191099
|
||||
:10B18000FD16003A0A505F19CD84B2C93E0ACDB708
|
||||
:10B19000023E0DCDB702ED5B0D50ED530F50210671
|
||||
:10B1A000500601CD56122141500E107EE5FE412879
|
||||
:10B1B00026FEE52822FE00CA08B20608CD58133E36
|
||||
:10B1C0002ECDB7020603CD58137ECDB7023E0ACD71
|
||||
:10B1D000B7023E0DCDB7020D2808E111200019C3BA
|
||||
:10B1E000ABB1E126002E01CD84B2ED5B0F501BED1B
|
||||
:10B1F000530F507AB3CA09B22106500601CD561238
|
||||
:10B200002141500E10C3ABB1E1212AB1CDBF02796B
|
||||
:10B21000CDE7022139B1CDBF02C9D5211150CDCE24
|
||||
:10B22000B23E10320F502106500601CD5612214178
|
||||
:10B23000500E10D1D5CDB8B238330D2807112000EB
|
||||
:10B2400019C333B226002E01CD84B23A0F503D32DD
|
||||
:10B250000F50CA65B22106500601CD561221415049
|
||||
:10B260000E10C333B2D121F3B2CDBF02C9D106084B
|
||||
:10B27000CD58133E2ECDB7020603CD58132105B38A
|
||||
:10B28000CDBF02C9DD2106507DDD8603DD770330A9
|
||||
:10B29000053E01DD86027CDD8602DD7702D03E01BF
|
||||
:10B2A000DD8601DD7701C92102501106501800C565
|
||||
:10B2B00006000E04EDB0C1C9E5C5060B1A4F7EA904
|
||||
:10B2C00020070520F7C1E137C9C1E1373FC9060BA7
|
||||
:10B2D000E5AF772310FCE1060D1AB7C805C8FE2EAE
|
||||
:10B2E000200A1378FE0538F1230518F71A7723137F
|
||||
:10B2F000C3D9B246696C65206E6F7420666F756E37
|
||||
:10B3000064210D0A002046696C65206C6F636174CE
|
||||
:06B310006564210D0A0036
|
||||
:07800000CD5A82CD3A80C980
|
||||
:04801000CD3A80C91C
|
||||
:04802000CD8583C9BE
|
||||
:10803000210600223543CDBB85C9CD0C860A0D50E3
|
||||
:1080400054522E4D454D5F4944455F504F494E5463
|
||||
:1080500045523A20202020307800DD213240CD34B6
|
||||
:1080600082CD0C8620207C20205054522E4D454D30
|
||||
:108070005F4944455F504152544954494F4E3A205C
|
||||
:108080002020307800DD212E40CD3482CD0C860AB0
|
||||
:108090000D5054522E4D454D5F4641545F544D5046
|
||||
:1080A000504F494E5445523A20307800DD211D434F
|
||||
:1080B000CD3482CD0C8620207C20205054522E4D71
|
||||
:1080C000454D5F4641545F544D50504F494E5445C5
|
||||
:1080D00052313A20307800DD212143CD3482CD0C5D
|
||||
:1080E000860A0D56414C2E4D454D5F4641545F5218
|
||||
:1080F000455345525645443A202020307800DD2132
|
||||
:108100001743CD4D82CD0C862020202020207C20BE
|
||||
:108110002056414C2E4D454D5F4641545F414D4FD9
|
||||
:10812000554E543A2020202020203078003A194320
|
||||
:10813000CD0701CD0C860A0D56414C2E4D454D5FA5
|
||||
:108140004641545F534543544F52533A2020202018
|
||||
:10815000307800DD211A43CD4D82CD0C86202020C1
|
||||
:108160002020207C202056414C2E4D454D5F46411D
|
||||
:10817000545F434F554E54313A2020202020203068
|
||||
:1081800078003A1C43CD0701CD0C860A0D56414CB0
|
||||
:108190002E4D454D5F4641545F4F46305F43434C43
|
||||
:1081A0005553543A20307800DD213543CD4D82CDF2
|
||||
:1081B0000C862020202020207C20205054522E4D40
|
||||
:1081C000454D5F4641545F4F46305F4641545345ED
|
||||
:1081D000433A2020307800DD213743CD3482CD0C66
|
||||
:1081E000860A0D56414C2E4D454D5F4641545F4F1A
|
||||
:1081F00046305F4441545345433A20307800DD21F6
|
||||
:108200003B43CD3482CD0C8620207C20205054521C
|
||||
:108210002E4D454D5F4641545F4F46305F444154BB
|
||||
:1082200052454D3A2020307800DD213F43CD4D822C
|
||||
:10823000CDF100C9DD7E03CD0701DD7E02CD070152
|
||||
:10824000DD7E01CD0701DD7E00CD0701C9DD7E01A8
|
||||
:10825000CD0701DD7E00CD0701C9327640F5CD970F
|
||||
:1082600014DD7E00B7C28882CD0B832A3240ED5BDD
|
||||
:108270002E40CD548521A482CDDF00F1C645CDD757
|
||||
:108280000021BB82CDDF00C921A482CDDF00F1C671
|
||||
:1082900045CDD70021AD82CDDF0011200001700057
|
||||
:1082A000CD170DC90A0D447269766520003A206E1B
|
||||
:1082B0006F742072656164790A0D003A2073656CF1
|
||||
:1082C00065637465640A0D000A0D496E76616C6918
|
||||
:1082D00064206472697665206C65747465720A0D39
|
||||
:1082E000000000000000000000000000000000008E
|
||||
:1082F000000000000000000000000000000000007E
|
||||
:108300000000000000000000000000CD4585213283
|
||||
:10831000403E01CDBE143A1741FEEBC25D83DD2124
|
||||
:108320001741DD7E0E321743DD7E0F321843DD7EAE
|
||||
:1083300010321943DD7E16321A43DD7E17321B439D
|
||||
:108340003A1B43573A1A435FAF676F3A19434719CD
|
||||
:1083500010FD16003A17435F19CD0085C9CD0C8674
|
||||
:108360000A0D43616E6E6F742066696E6420626FE1
|
||||
:108370006F7420736563746F722E0A0D00CD9714AD
|
||||
:10838000DD360002C9ED5B1A43ED531C4321324038
|
||||
:108390000601CDBE14CD0C860A0D202046696C6501
|
||||
:1083A0006E616D652020202020436C7573746572AA
|
||||
:1083B0002053697A650A0D002117410E107EE5DD14
|
||||
:1083C000E1E5FE41CA6384FEE5CA6384FE00CA9407
|
||||
:1083D00084DD7E0BFE10CA31843E20CDD7003E20C6
|
||||
:1083E000CDD7000608CD63173E2ECDD7000603CDAE
|
||||
:1083F0006317CD0C8620307800DD7E1BCD0701DDB4
|
||||
:108400007E1ACD0701CD0C862020307800DD7E1F3E
|
||||
:10841000CD0701DD7E1ECD0701DD7E1DCD0701DD0F
|
||||
:108420007E1CCD07013E0ACDD7003E0DCDD70018EA
|
||||
:10843000323E44CDD7003E20CDD7000608CD63178D
|
||||
:10844000CD0C862020202020307800DD7E1BCD073B
|
||||
:1084500001DD7E1ACD07013E0ACDD7003E0DCDD7F6
|
||||
:108460000018000D2808E111200019C3BD83E12682
|
||||
:10847000002E01CD0085ED5B1C431BED531C437AA0
|
||||
:10848000B3CA95842132400601CDBE142117410E96
|
||||
:1084900010C3BD83E1C9D5212543CD73853E10327C
|
||||
:1084A0001C432132400601CDBE142117410E10D1CC
|
||||
:1084B000D5CD5D8538330D280711200019C3AF8451
|
||||
:1084C00026002E01CD00853A1C433D321C43CAE1F3
|
||||
:1084D000842132400601CDBE142117410E10C3AFD6
|
||||
:1084E00084D1219885CDDF00C9D10608CD63173E20
|
||||
:1084F0002ECDD7000603CD631721AA85CDDF00C995
|
||||
:10850000221D43AF321F43322043111D430132402D
|
||||
:10851000CD1485C9E5C5D51A6F131A67130A5F0311
|
||||
:108520000A5719D1C17D02037C02031313C5D51A62
|
||||
:108530006F131A67130A5F030A57ED5AD1C17D0200
|
||||
:10854000037C02E1C9CD9714DD23DD23DDE5E111D4
|
||||
:1085500032401800C506000E04EDB0C1C9E5C506DD
|
||||
:108560000B1A4F7EA920070520F7C1E137C9C1E1E9
|
||||
:10857000373FC9060BE5AF772310FCE1060D1AB7AC
|
||||
:10858000C805C8FE2E200A1378FE0538F123051809
|
||||
:10859000F71A772313C37E8546696C65206E6F7466
|
||||
:1085A00020666F756E64210D0A002046696C652097
|
||||
:1085B0006C6F6361746564210D0A002A35437C6F1A
|
||||
:1085C000AF67ED4B174309223743AF323943323A95
|
||||
:1085D00043CD9714DD23DD23DDE5D1013743CD14F1
|
||||
:1085E00085CD3A802137430601CDBE1421174106BF
|
||||
:1085F00014CDC9163A3543176F3E0017671117415E
|
||||
:1086000019113543EDA0EDA0CD3A80C9E3F5C57E43
|
||||
:0F861000FE002806CDD7002318F523C1F1E3C9DA
|
||||
:00000001FF
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,50 +1,98 @@
|
||||
!B000 CD 38 B0 CD 42 B1 11 0F B0 CD 1A B2 C3 99 00 49
|
||||
!B010 4C 4C 55 53 49 4F 4E 2E 50 53 47 00 48 41 4C 4C
|
||||
!B020 4F 57 4C 54 2E 54 58 54 00 54 45 53 54 00 2E 4F
|
||||
!B030 52 47 00 F5 F1 F5 F1 C9 3E 01 06 0A CD B3 10 3E
|
||||
!B040 01 06 0B CD B3 10 3E 00 06 0C CD B3 10 3E 00 06
|
||||
!B050 0D CD B3 10 3E A0 06 0E CD B3 10 3E 20 06 0F CD
|
||||
!B060 B3 10 21 41 50 CD 1D 11 06 04 0E 00 DD 21 FF 51
|
||||
!B070 DD 7E 04 B7 C2 8C B0 C3 7A B0 3E 0A CD B7 02 3E
|
||||
!B080 0D CD B7 02 11 10 00 DD 19 10 E5 C9 21 04 B1 CD
|
||||
!B090 BF 02 DD 7E 04 CD E7 02 DD 7E 04 FE 0E 20 DB 21
|
||||
!B0A0 0F B1 CD BF 02 21 18 B1 CD BF 02 DD 7E 08 32 05
|
||||
!B0B0 50 DD 7E 09 32 04 50 DD 7E 0A 32 03 50 DD 7E 0B
|
||||
!B0C0 32 02 50 3A 05 50 CD E7 02 3A 04 50 CD E7 02 3A
|
||||
!B0D0 03 50 CD E7 02 3A 02 50 CD E7 02 21 21 B1 CD BF
|
||||
!B0E0 02 DD 7E 0C CD E7 02 DD 7E 0D CD E7 02 DD 7E 0E
|
||||
!B0F0 CD E7 02 DD 7E 0F CD E7 02 3E 0A CD B7 02 3E 0D
|
||||
!B100 CD B7 02 C9 2D 20 54 79 70 65 3A 20 30 78 00 20
|
||||
!B110 53 74 61 74 65 3A 20 00 20 4C 42 41 3A 20 30 78
|
||||
!B120 00 20 4C 65 6E 3A 20 30 78 00 2D 2D 2D 2D 2D 2D
|
||||
!B130 2D 2D 2D 2D 2D 2D 0A 0D 00 20 46 69 6C 65 73 0A
|
||||
!B140 0D 00 CD A7 B2 21 02 50 3E 01 CD 56 12 DD 21 41
|
||||
!B150 50 DD 7E 0E 32 0A 50 DD 7E 0F 32 0B 50 DD 7E 10
|
||||
!B160 32 0C 50 DD 7E 16 32 0D 50 DD 7E 17 32 0E 50 3A
|
||||
!B170 0E 50 57 3A 0D 50 5F AF 67 6F 3A 0C 50 47 19 10
|
||||
!B180 FD 16 00 3A 0A 50 5F 19 CD 84 B2 C9 3E 0A CD B7
|
||||
!B190 02 3E 0D CD B7 02 ED 5B 0D 50 ED 53 0F 50 21 06
|
||||
!B1A0 50 06 01 CD 56 12 21 41 50 0E 10 7E E5 FE 41 28
|
||||
!B1B0 26 FE E5 28 22 FE 00 CA 08 B2 06 08 CD 58 13 3E
|
||||
!B1C0 2E CD B7 02 06 03 CD 58 13 7E CD B7 02 3E 0A CD
|
||||
!B1D0 B7 02 3E 0D CD B7 02 0D 28 08 E1 11 20 00 19 C3
|
||||
!B1E0 AB B1 E1 26 00 2E 01 CD 84 B2 ED 5B 0F 50 1B ED
|
||||
!B1F0 53 0F 50 7A B3 CA 09 B2 21 06 50 06 01 CD 56 12
|
||||
!B200 21 41 50 0E 10 C3 AB B1 E1 21 2A B1 CD BF 02 79
|
||||
!B210 CD E7 02 21 39 B1 CD BF 02 C9 D5 21 11 50 CD CE
|
||||
!B220 B2 3E 10 32 0F 50 21 06 50 06 01 CD 56 12 21 41
|
||||
!B230 50 0E 10 D1 D5 CD B8 B2 38 33 0D 28 07 11 20 00
|
||||
!B240 19 C3 33 B2 26 00 2E 01 CD 84 B2 3A 0F 50 3D 32
|
||||
!B250 0F 50 CA 65 B2 21 06 50 06 01 CD 56 12 21 41 50
|
||||
!B260 0E 10 C3 33 B2 D1 21 F3 B2 CD BF 02 C9 D1 06 08
|
||||
!B270 CD 58 13 3E 2E CD B7 02 06 03 CD 58 13 21 05 B3
|
||||
!B280 CD BF 02 C9 DD 21 06 50 7D DD 86 03 DD 77 03 30
|
||||
!B290 05 3E 01 DD 86 02 7C DD 86 02 DD 77 02 D0 3E 01
|
||||
!B2A0 DD 86 01 DD 77 01 C9 21 02 50 11 06 50 18 00 C5
|
||||
!B2B0 06 00 0E 04 ED B0 C1 C9 E5 C5 06 0B 1A 4F 7E A9
|
||||
!B2C0 20 07 05 20 F7 C1 E1 37 C9 C1 E1 37 3F C9 06 0B
|
||||
!B2D0 E5 AF 77 23 10 FC E1 06 0D 1A B7 C8 05 C8 FE 2E
|
||||
!B2E0 20 0A 13 78 FE 05 38 F1 23 05 18 F7 1A 77 23 13
|
||||
!B2F0 C3 D9 B2 46 69 6C 65 20 6E 6F 74 20 66 6F 75 6E
|
||||
!B300 64 21 0D 0A 00 20 46 69 6C 65 20 6C 6F 63 61 74
|
||||
!B310 65 64 21 0D 0A 00
|
||||
!8000 CD 5A 82 CD 3A 80 C9
|
||||
!8010 CD 3A 80 C9
|
||||
!8020 CD 85 83 C9
|
||||
!8030 21 06 00 22 35 43 CD BB 85 C9 CD 0C 86 0A 0D 50
|
||||
!8040 54 52 2E 4D 45 4D 5F 49 44 45 5F 50 4F 49 4E 54
|
||||
!8050 45 52 3A 20 20 20 20 30 78 00 DD 21 32 40 CD 34
|
||||
!8060 82 CD 0C 86 20 20 7C 20 20 50 54 52 2E 4D 45 4D
|
||||
!8070 5F 49 44 45 5F 50 41 52 54 49 54 49 4F 4E 3A 20
|
||||
!8080 20 20 30 78 00 DD 21 2E 40 CD 34 82 CD 0C 86 0A
|
||||
!8090 0D 50 54 52 2E 4D 45 4D 5F 46 41 54 5F 54 4D 50
|
||||
!80A0 50 4F 49 4E 54 45 52 3A 20 30 78 00 DD 21 1D 43
|
||||
!80B0 CD 34 82 CD 0C 86 20 20 7C 20 20 50 54 52 2E 4D
|
||||
!80C0 45 4D 5F 46 41 54 5F 54 4D 50 50 4F 49 4E 54 45
|
||||
!80D0 52 31 3A 20 30 78 00 DD 21 21 43 CD 34 82 CD 0C
|
||||
!80E0 86 0A 0D 56 41 4C 2E 4D 45 4D 5F 46 41 54 5F 52
|
||||
!80F0 45 53 45 52 56 45 44 3A 20 20 20 30 78 00 DD 21
|
||||
!8100 17 43 CD 4D 82 CD 0C 86 20 20 20 20 20 20 7C 20
|
||||
!8110 20 56 41 4C 2E 4D 45 4D 5F 46 41 54 5F 41 4D 4F
|
||||
!8120 55 4E 54 3A 20 20 20 20 20 20 30 78 00 3A 19 43
|
||||
!8130 CD 07 01 CD 0C 86 0A 0D 56 41 4C 2E 4D 45 4D 5F
|
||||
!8140 46 41 54 5F 53 45 43 54 4F 52 53 3A 20 20 20 20
|
||||
!8150 30 78 00 DD 21 1A 43 CD 4D 82 CD 0C 86 20 20 20
|
||||
!8160 20 20 20 7C 20 20 56 41 4C 2E 4D 45 4D 5F 46 41
|
||||
!8170 54 5F 43 4F 55 4E 54 31 3A 20 20 20 20 20 20 30
|
||||
!8180 78 00 3A 1C 43 CD 07 01 CD 0C 86 0A 0D 56 41 4C
|
||||
!8190 2E 4D 45 4D 5F 46 41 54 5F 4F 46 30 5F 43 43 4C
|
||||
!81A0 55 53 54 3A 20 30 78 00 DD 21 35 43 CD 4D 82 CD
|
||||
!81B0 0C 86 20 20 20 20 20 20 7C 20 20 50 54 52 2E 4D
|
||||
!81C0 45 4D 5F 46 41 54 5F 4F 46 30 5F 46 41 54 53 45
|
||||
!81D0 43 3A 20 20 30 78 00 DD 21 37 43 CD 34 82 CD 0C
|
||||
!81E0 86 0A 0D 56 41 4C 2E 4D 45 4D 5F 46 41 54 5F 4F
|
||||
!81F0 46 30 5F 44 41 54 53 45 43 3A 20 30 78 00 DD 21
|
||||
!8200 3B 43 CD 34 82 CD 0C 86 20 20 7C 20 20 50 54 52
|
||||
!8210 2E 4D 45 4D 5F 46 41 54 5F 4F 46 30 5F 44 41 54
|
||||
!8220 52 45 4D 3A 20 20 30 78 00 DD 21 3F 43 CD 4D 82
|
||||
!8230 CD F1 00 C9 DD 7E 03 CD 07 01 DD 7E 02 CD 07 01
|
||||
!8240 DD 7E 01 CD 07 01 DD 7E 00 CD 07 01 C9 DD 7E 01
|
||||
!8250 CD 07 01 DD 7E 00 CD 07 01 C9 32 76 40 F5 CD 97
|
||||
!8260 14 DD 7E 00 B7 C2 88 82 CD 0B 83 2A 32 40 ED 5B
|
||||
!8270 2E 40 CD 54 85 21 A4 82 CD DF 00 F1 C6 45 CD D7
|
||||
!8280 00 21 BB 82 CD DF 00 C9 21 A4 82 CD DF 00 F1 C6
|
||||
!8290 45 CD D7 00 21 AD 82 CD DF 00 11 20 00 01 70 00
|
||||
!82A0 CD 17 0D C9 0A 0D 44 72 69 76 65 20 00 3A 20 6E
|
||||
!82B0 6F 74 20 72 65 61 64 79 0A 0D 00 3A 20 73 65 6C
|
||||
!82C0 65 63 74 65 64 0A 0D 00 0A 0D 49 6E 76 61 6C 69
|
||||
!82D0 64 20 64 72 69 76 65 20 6C 65 74 74 65 72 0A 0D
|
||||
!82E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
!82F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
!8300 00 00 00 00 00 00 00 00 00 00 00 CD 45 85 21 32
|
||||
!8310 40 3E 01 CD BE 14 3A 17 41 FE EB C2 5D 83 DD 21
|
||||
!8320 17 41 DD 7E 0E 32 17 43 DD 7E 0F 32 18 43 DD 7E
|
||||
!8330 10 32 19 43 DD 7E 16 32 1A 43 DD 7E 17 32 1B 43
|
||||
!8340 3A 1B 43 57 3A 1A 43 5F AF 67 6F 3A 19 43 47 19
|
||||
!8350 10 FD 16 00 3A 17 43 5F 19 CD 00 85 C9 CD 0C 86
|
||||
!8360 0A 0D 43 61 6E 6E 6F 74 20 66 69 6E 64 20 62 6F
|
||||
!8370 6F 74 20 73 65 63 74 6F 72 2E 0A 0D 00 CD 97 14
|
||||
!8380 DD 36 00 02 C9 ED 5B 1A 43 ED 53 1C 43 21 32 40
|
||||
!8390 06 01 CD BE 14 CD 0C 86 0A 0D 20 20 46 69 6C 65
|
||||
!83A0 6E 61 6D 65 20 20 20 20 20 43 6C 75 73 74 65 72
|
||||
!83B0 20 53 69 7A 65 0A 0D 00 21 17 41 0E 10 7E E5 DD
|
||||
!83C0 E1 E5 FE 41 CA 63 84 FE E5 CA 63 84 FE 00 CA 94
|
||||
!83D0 84 DD 7E 0B FE 10 CA 31 84 3E 20 CD D7 00 3E 20
|
||||
!83E0 CD D7 00 06 08 CD 63 17 3E 2E CD D7 00 06 03 CD
|
||||
!83F0 63 17 CD 0C 86 20 30 78 00 DD 7E 1B CD 07 01 DD
|
||||
!8400 7E 1A CD 07 01 CD 0C 86 20 20 30 78 00 DD 7E 1F
|
||||
!8410 CD 07 01 DD 7E 1E CD 07 01 DD 7E 1D CD 07 01 DD
|
||||
!8420 7E 1C CD 07 01 3E 0A CD D7 00 3E 0D CD D7 00 18
|
||||
!8430 32 3E 44 CD D7 00 3E 20 CD D7 00 06 08 CD 63 17
|
||||
!8440 CD 0C 86 20 20 20 20 20 30 78 00 DD 7E 1B CD 07
|
||||
!8450 01 DD 7E 1A CD 07 01 3E 0A CD D7 00 3E 0D CD D7
|
||||
!8460 00 18 00 0D 28 08 E1 11 20 00 19 C3 BD 83 E1 26
|
||||
!8470 00 2E 01 CD 00 85 ED 5B 1C 43 1B ED 53 1C 43 7A
|
||||
!8480 B3 CA 95 84 21 32 40 06 01 CD BE 14 21 17 41 0E
|
||||
!8490 10 C3 BD 83 E1 C9 D5 21 25 43 CD 73 85 3E 10 32
|
||||
!84A0 1C 43 21 32 40 06 01 CD BE 14 21 17 41 0E 10 D1
|
||||
!84B0 D5 CD 5D 85 38 33 0D 28 07 11 20 00 19 C3 AF 84
|
||||
!84C0 26 00 2E 01 CD 00 85 3A 1C 43 3D 32 1C 43 CA E1
|
||||
!84D0 84 21 32 40 06 01 CD BE 14 21 17 41 0E 10 C3 AF
|
||||
!84E0 84 D1 21 98 85 CD DF 00 C9 D1 06 08 CD 63 17 3E
|
||||
!84F0 2E CD D7 00 06 03 CD 63 17 21 AA 85 CD DF 00 C9
|
||||
!8500 22 1D 43 AF 32 1F 43 32 20 43 11 1D 43 01 32 40
|
||||
!8510 CD 14 85 C9 E5 C5 D5 1A 6F 13 1A 67 13 0A 5F 03
|
||||
!8520 0A 57 19 D1 C1 7D 02 03 7C 02 03 13 13 C5 D5 1A
|
||||
!8530 6F 13 1A 67 13 0A 5F 03 0A 57 ED 5A D1 C1 7D 02
|
||||
!8540 03 7C 02 E1 C9 CD 97 14 DD 23 DD 23 DD E5 E1 11
|
||||
!8550 32 40 18 00 C5 06 00 0E 04 ED B0 C1 C9 E5 C5 06
|
||||
!8560 0B 1A 4F 7E A9 20 07 05 20 F7 C1 E1 37 C9 C1 E1
|
||||
!8570 37 3F C9 06 0B E5 AF 77 23 10 FC E1 06 0D 1A B7
|
||||
!8580 C8 05 C8 FE 2E 20 0A 13 78 FE 05 38 F1 23 05 18
|
||||
!8590 F7 1A 77 23 13 C3 7E 85 46 69 6C 65 20 6E 6F 74
|
||||
!85A0 20 66 6F 75 6E 64 21 0D 0A 00 20 46 69 6C 65 20
|
||||
!85B0 6C 6F 63 61 74 65 64 21 0D 0A 00 2A 35 43 7C 6F
|
||||
!85C0 AF 67 ED 4B 17 43 09 22 37 43 AF 32 39 43 32 3A
|
||||
!85D0 43 CD 97 14 DD 23 DD 23 DD E5 D1 01 37 43 CD 14
|
||||
!85E0 85 CD 3A 80 21 37 43 06 01 CD BE 14 21 17 41 06
|
||||
!85F0 14 CD C9 16 3A 35 43 17 6F 3E 00 17 67 11 17 41
|
||||
!8600 19 11 35 43 ED A0 ED A0 CD 3A 80 C9 E3 F5 C5 7E
|
||||
!8610 FE 00 28 06 CD D7 00 23 18 F5 23 C1 F1 E3 C9
|
||||
|
||||
Reference in New Issue
Block a user