several fixes
This commit is contained in:
1
OperatingSystem/Applications/mkdir/include/extern_symbols.s
Symbolic link
1
OperatingSystem/Applications/mkdir/include/extern_symbols.s
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../monitor_v2/zout/symbols.s
|
||||
100
OperatingSystem/Applications/mkdir/main.asm
Normal file
100
OperatingSystem/Applications/mkdir/main.asm
Normal file
@@ -0,0 +1,100 @@
|
||||
IDE_CMD_WRITESEC .EQU 0x30
|
||||
|
||||
|
||||
.include "extern_symbols.s" ;include monitor symbols.
|
||||
START_ADDR .EQU 0x8000
|
||||
|
||||
org START_ADDR
|
||||
com_header:
|
||||
jp com_prg
|
||||
db 0x00
|
||||
dw 0x00, 0x00, 0x00 ;always 0
|
||||
dw [START_ADDR] ;start addr
|
||||
dw [_eof] ;end of file
|
||||
dw [_eof - START_ADDR] ;length
|
||||
dc 48,0x00
|
||||
|
||||
com_prg:
|
||||
; Program starts here
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; write_lba_sector
|
||||
;
|
||||
; Writes A*512 byte sector ro disk
|
||||
; HL contains pointer to LBA address
|
||||
; DE contains data location
|
||||
; A contains sector count
|
||||
;------------------------------------------------------------------------------
|
||||
write_lba_sector:
|
||||
push af
|
||||
ide_wait_rdy
|
||||
pop af
|
||||
;setup registers
|
||||
LD B,IDE_REG_SECTOR ;amount of sectores
|
||||
CALL ide_regwrite_8
|
||||
LD A,(HL)
|
||||
LD B,IDE_REG_LBA0
|
||||
CALL ide_regwrite_8
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
LD B,IDE_REG_LBA1
|
||||
CALL ide_regwrite_8
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
LD B,IDE_REG_LBA2
|
||||
CALL ide_regwrite_8
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
AND 00001111b
|
||||
OR 11100000b
|
||||
LD B,IDE_REG_LBA3
|
||||
CALL ide_regwrite_8
|
||||
|
||||
LD A,IDE_CMD_WRITESEC ;send read command
|
||||
LD B,IDE_REG_CMDSTS
|
||||
CALL ide_regwrite_8
|
||||
jp ide_writesector_512_fast
|
||||
|
||||
ide_writesector_512_fast:
|
||||
ld b, IDE_REG_CMDSTS ;check status
|
||||
call ide_regread_8
|
||||
bit 0,a ;Error Bit set
|
||||
jp nz, ide_printerror ;then abort
|
||||
bit 3,a ;wait for drq
|
||||
jr z,ide_writesector_512_fast
|
||||
|
||||
ld b,0 ;256x
|
||||
ld a, 10000000b ;CommandByte-A, Mode 0, PA Out, PC Out, PB Out
|
||||
out (CS_PIA_CR), a ;Set Data direction to IN
|
||||
_ide_writesector_512_loop:
|
||||
ld a, IDE_REG_DATA ;CS0 and A=0 -> I/O register
|
||||
out (CS_PIA_PC), a ;set register
|
||||
ld a,(hl)
|
||||
out (CS_PIA_PA),a
|
||||
inc hl
|
||||
ld a,(hl)
|
||||
out (CS_PIA_PB),a
|
||||
inc hl
|
||||
or IDE_WR ;Set Read bit
|
||||
out (CS_PIA_PC), a ;Write Read to bit controll lines
|
||||
ld a, IDE_REG_DATA ;CS0 and A=0 -> I/O register
|
||||
out (CS_PIA_PC), a ;set register
|
||||
djnz _ide_writesector_512_loop ; loop for 512 bytes
|
||||
_ide_writesector_512_waitready:
|
||||
ld b, IDE_REG_CMDSTS;check drive status
|
||||
call ide_regread_8
|
||||
bit 0,a ;Error Bit set
|
||||
jp nz, ide_printerror ;then abort
|
||||
bit 7,a ;test if data is written
|
||||
jp nz _ide_writesector_512_waitready ; if still writing, loop
|
||||
bit 3,a ;test if drive awaits next sector
|
||||
jp nz, ide_writesector_512_fast
|
||||
ret z
|
||||
|
||||
; Program ends here
|
||||
_eof:
|
||||
Reference in New Issue
Block a user