flat assembler
Message board for the users of flat assembler.
Index
> OS Construction > PHBoot Program ??? |
Author |
|
rhyno_dagreat 05 Dec 2006, 00:02
Sorry if I came off a bit strong in the questions, but here's what I'm really wondering: How's it reading/writing to the diskette? I see not int 13h being used
|
|||
05 Dec 2006, 00:02 |
|
LocoDelAssembly 05 Dec 2006, 00:30
Quote:
Code: read_linear_again: push ax ;save ax; count can be destroyed? RIGHT mov ah,02h ;read sectors int 13h ;BIOS disk interrupt jnc short read_linear_ok ;cool, no error (really?!! ) |
|||
05 Dec 2006, 00:30 |
|
rhyno_dagreat 05 Dec 2006, 01:25
... Of all the embarrassing things I could beat myself up about...
Lo siento y gracias Loco! One question though... How do I perform access to the hard disk in PMode? |
|||
05 Dec 2006, 01:25 |
|
LocoDelAssembly 05 Dec 2006, 01:57
Quote:
AFAIK, two options, backing to real mode to call int13 and then switching again to PMode or writing your own driver. If you want to see some driver source code you can look at http://octaos.joox.net/ which has IDE support (written in OctaASM) and http://www.osdever.net/ for hardware reference. Quote:
No hay problema |
|||
05 Dec 2006, 01:57 |
|
rhyno_dagreat 05 Dec 2006, 02:10
Thanks again!
|
|||
05 Dec 2006, 02:10 |
|
Dex4u 05 Dec 2006, 02:59
To read/write to hdd is very easy, but it's the fat that will take more time, to get right.
Code: ; Reading the harddisk using ports!; +-------------------------------+ by qark;;; This took me months to get working but I finally managed it.;; This code only works for the 286+ so you must detect for 8088's somewhere; in your code.;; Technical Information on the ports:; Port Read/Write Misc; ------ ------------ -------------------------------------------------; 1f0 r/w data register, the bytes are written/read here; 1f1 r error register (look these values up yourself); 1f2 r/w sector count, how many sectors to read/write; 1f3 r/w sector number, the actual sector wanted; 1f4 r/w cylinder low, cylinders is 0-1024; 1f5 r/w cylinder high, this makes up the rest of the 1024; 1f6 r/w drive/head; bit 7 = 1; bit 6 = 0; bit 5 = 1; bit 4 = 0 drive 0 select; = 1 drive 1 select; bit 3-0 head select bits; 1f7 r status register; bit 7 = 1 controller is executing a command; bit 6 = 1 drive is ready; bit 5 = 1 write fault; bit 4 = 1 seek complete; bit 3 = 1 sector buffer requires servicing; bit 2 = 1 disk data read corrected; bit 1 = 1 index - set to 1 each revolution; bit 0 = 1 previous command ended in an error; 1f7 w command register; commands:; 50h format track; 20h read sectors with retry; 21h read sectors without retry; 22h read long with retry; 23h read long without retry; 30h write sectors with retry; 31h write sectors without retry; 32h write long with retry; 33h write long without retry;; Most of these should work on even non-IDE hard disks.; This code is for reading, the code for writing is the next article. mov dx,1f6h ;Drive and head port mov al,0a0h ;Drive 0, head 0 out dx,al mov dx,1f2h ;Sector count port mov al,1 ;Read one sector out dx,al mov dx,1f3h ;Sector number port mov al,1 ;Read sector one out dx,al mov dx,1f4h ;Cylinder low port mov al,0 ;Cylinder 0 out dx,al mov dx,1f5h ;Cylinder high port mov al,0 ;The rest of the cylinder 0 out dx,al mov dx,1f7h ;Command port mov al,20h ;Read with retry. out dx,alstill_going: in al,dx test al,8 ;This means the sector buffer requires ;servicing. jz still_going ;Don't continue until the sector buffer ;is ready. mov cx,512/2 ;One sector /2 mov di,offset buffer mov dx,1f0h ;Data port - data comes in and out of here. rep insw; ------ mov ax,201h ;Read using int13h then compare buffers. mov dx,80h mov cx,1 mov bx,offset buffer2 int 13h mov cx,512 mov si,offset buffer mov di,offset buffer2 repe cmpsb jne failure mov ah,9 mov dx,offset readmsg int 21h jmp good_exitfailure: mov ah,9 mov dx,offset failmsg int 21hgood_exit: mov ax,4c00h ;Exit the program int 21h readmsg db 'The buffers match. Hard disk read using ports.$' failmsg db 'The buffers do not match.$'buffer db 512 dup ('V')buffer2 db 512 dup ('L');; Writing to the hard disk using the ports! by qark; +---------------------------------------+;; The only differences between reading and writing using the ports is; that 30h is sent to the command register, and instead of INSW you; OUTSW. ; mov dx,1f6h ;Drive and head port mov al,0a0h ;Drive 0, head 0 out dx,al mov dx,1f2h ;Sector count port mov al,1 ;Write one sector out dx,al mov dx,1f3h ;Sector number port mov al,1 ;Wrote to sector one out dx,al mov dx,1f4h ;Cylinder low port mov al,0 ;Cylinder 0 out dx,al mov dx,1f5h ;Cylinder high port mov al,0 ;The rest of the cylinder 0 out dx,al mov dx,1f7h ;Command port mov al,30h ;Write with retry. out dx,aloogle: in al,dx test al,8 ;Wait for sector buffer ready. jz oogle mov cx,512/2 ;One sector /2 mov si,offset buffer mov dx,1f0h ;Data port - data comes in and out of here. rep outsw ;Send it.; ------------ mov ax,201h ;We'll read in sector 1 using mov bx,offset buffer2 ;int13h and see if we are successful. mov cx,1 mov dx,80h int 13h mov cx,512 mov si,offset buffer mov di,offset buffer2 repe cmpsb ;Compare the buffers. jne failure mov ah,9 mov dx,offset write_msg int 21h jmp w_exitfailure: mov ah,9 mov dx,offset fail int 21hw_exit: mov ax,4c00h ;Exit the program int 21h write_msg db 'Sector one written to using the ports, OH NO! there goes XP.$' fail db 'Writing using ports failed.$'buffer db 512 dup ('A')buffer2 db 512 dup ('D') NOTE: THE ABOVE CODE WILL OVER WRITE YOUR MBR, so do not run with above settings. So do not use the write part untill you have better understanding. Here my pmode floppy driver writen in fasm, commented to go with intels pdf for floppy controler : http://www.dex4u.com/DexFloppy/FloppyDriver.zip |
|||
05 Dec 2006, 02:59 |
|
rhyno_dagreat 05 Dec 2006, 06:25
Thanks Dex!
Edit: It said inside of that that it was apparently one article out of two or more, do you by any chance have the site where I can get those from directly? |
|||
05 Dec 2006, 06:25 |
|
rhyno_dagreat 05 Dec 2006, 06:55
Wow.... Nevermind... I found it in my OSDev docs folder on my HD... that was the file I was looking for!!!!! I thought it was pdf though. I knew I had seen that file before, just not sure where. Thanks though! I have the whole thing there on my HD, so I'm looking at it
|
|||
05 Dec 2006, 06:55 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.