[asm]boot + img
[asm]boot + img
Hi i have big problem
i Have this code:
[BITS 16]
[ORG 0000h]
jmp start
paleta db 0,0,0
db 63,63,63
db 61,61,61
db 59,59,59
db 57,57,57
db 55,55,55
db 53,53,53
db 51,51,51
db 49,49,49
db 47,47,47
db 45,45,45
db 43,43,43
db 41,41,41
db 39,39,39
db 37,37,37
db 35,35,35
db 33,33,33
db 31,31,31
db 29,29,29
db 27,27,27
db 25,25,25
db 23,23,23
db 21,21,21
db 19,19,19
db 17,17,17
db 15,15,15
db 13,13,13
db 11,11,11
db 9,9,9
db 7,7,7
db 5,5,5
db 3,3,3
db 1,1,1
start: mov ax,0013h
int 10h
mov ax,0x07C0
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax
mov ax,00h
mov ss,ax
mov sp,0xFFFF
MOV SI,paleta
MOV CX,99
MOV DX,03C8H
XOR AL,AL
CLI
OUT DX,AL
CLD
INC DX
REP OUTSB
STI
mov ah,00h
mov dl,00h
int 13h
mov ah,00h
mov dl,00h
int 13h
mov ah,00h
mov dl,00h
int 13h
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,06h
mov ch,03h
mov cl,0ch
mov dl,00h
int 13h
mov bx,0x0C00
mov ah,02h
mov al,12h
mov ch,04h
mov cl,00h
mov dl,00h
int 13h
mov ax,0xA000
mov es,ax
xor ax,ax
mov di,ax
mov ax,100h
mov ds,ax
xor ax,ax
mov si,ax
mov cx,3000h
rep movsb
ret
TIMES 510-($-$$) DB 0
DW 0xAA55
I will read 65 sector to 88 sector to 0100:000 and of the 0100:0000 to A000:0000, in sector 0 is bootloader
I booting....... I look and see black monitor why? in the 65-88 sector is monohromatic picture, i dont know why?
please help ME!!!
i Have this code:
[BITS 16]
[ORG 0000h]
jmp start
paleta db 0,0,0
db 63,63,63
db 61,61,61
db 59,59,59
db 57,57,57
db 55,55,55
db 53,53,53
db 51,51,51
db 49,49,49
db 47,47,47
db 45,45,45
db 43,43,43
db 41,41,41
db 39,39,39
db 37,37,37
db 35,35,35
db 33,33,33
db 31,31,31
db 29,29,29
db 27,27,27
db 25,25,25
db 23,23,23
db 21,21,21
db 19,19,19
db 17,17,17
db 15,15,15
db 13,13,13
db 11,11,11
db 9,9,9
db 7,7,7
db 5,5,5
db 3,3,3
db 1,1,1
start: mov ax,0013h
int 10h
mov ax,0x07C0
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax
mov ax,00h
mov ss,ax
mov sp,0xFFFF
MOV SI,paleta
MOV CX,99
MOV DX,03C8H
XOR AL,AL
CLI
OUT DX,AL
CLD
INC DX
REP OUTSB
STI
mov ah,00h
mov dl,00h
int 13h
mov ah,00h
mov dl,00h
int 13h
mov ah,00h
mov dl,00h
int 13h
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,06h
mov ch,03h
mov cl,0ch
mov dl,00h
int 13h
mov bx,0x0C00
mov ah,02h
mov al,12h
mov ch,04h
mov cl,00h
mov dl,00h
int 13h
mov ax,0xA000
mov es,ax
xor ax,ax
mov di,ax
mov ax,100h
mov ds,ax
xor ax,ax
mov si,ax
mov cx,3000h
rep movsb
ret
TIMES 510-($-$$) DB 0
DW 0xAA55
I will read 65 sector to 88 sector to 0100:000 and of the 0100:0000 to A000:0000, in sector 0 is bootloader
I booting....... I look and see black monitor why? in the 65-88 sector is monohromatic picture, i dont know why?
please help ME!!!
- Pype.Clicker
- Member
- Posts: 5964
- Joined: Wed Oct 18, 2006 2:31 am
- Location: In a galaxy, far, far away
- Contact:
Re:[asm]boot + img
i'm still surprised at those people who completely ignore to check the status of a BIOS disk query and hope a coherent behaviour ...
The floppy *will* fail from time to time because of its internal mechanics and *you* have to catch BIOS errors, retry the load command at least 3 times before concluding to a fatal error.
starting writing sectors in memory from 0x100:0000 might not be wise since it may erase your bootloader if you have more than 6C00 bytes of data to load ... your first row of sectors (12 of them iiuc) is 0xC * 0x200 == 0x1800 (so it shouldn't harm)
Iirc, the 'palette setting' required the color index to be refreshed every time a new color will be set. Isn't your loop setting 33 successive different values for color #0 ?
drawing a test line on screen could help you guessing if it worked correctly or not:
strange enough, you load 0x1800 bytes at 0x100:0000 and then 0x800 bytes at 0x100:0C00, which means you overwrite a part of what you've been doing before ...
On the other side, you have a large amount of palette data... did you check the whole bootsector wasn't above 512 bytes ?
The floppy *will* fail from time to time because of its internal mechanics and *you* have to catch BIOS errors, retry the load command at least 3 times before concluding to a fatal error.
starting writing sectors in memory from 0x100:0000 might not be wise since it may erase your bootloader if you have more than 6C00 bytes of data to load ... your first row of sectors (12 of them iiuc) is 0xC * 0x200 == 0x1800 (so it shouldn't harm)
Iirc, the 'palette setting' required the color index to be refreshed every time a new color will be set. Isn't your loop setting 33 successive different values for color #0 ?
drawing a test line on screen could help you guessing if it worked correctly or not:
Code: Select all
mov ax,0013h
int 0x10
mov ax,0xa000
mov es,ax
xor bx,bx
.loop
mov [es:bx],bl
inc bl
jnz .loop
;; now you can do your palette setting stuff
On the other side, you have a large amount of palette data... did you check the whole bootsector wasn't above 512 bytes ?
Re:[asm]boot + img
Hi,
You could also add some code here to test if the pallette is set correctly, for e.g.:
Cheers,
Brendan
Your stack should be aligned for better performance - "mov sp,0xFFFE", or "mov sp,0".PJ wrote:Code: Select all
start: mov ax,0013h int 10h mov ax,0x07C0 mov ds,ax mov es,ax mov fs,ax mov gs,ax mov ax,00h mov ss,ax mov sp,0xFFFF
I'm not sure if the video card will be fast enough to keep up with "rep outsb". You might want to try ".l1: lodsb; out dx,al; loop .l1" to see if it makes a difference. Also some video cards are not VGA compatible, and this code can have unexpected results. You'd be better to use the BIOS function "INT 0x10, AX = 1002h", which would work on a wider variety of video cards (and would take up less space in the boot sector).PJ wrote:Code: Select all
MOV SI,paleta MOV CX,99 MOV DX,03C8H XOR AL,AL CLI OUT DX,AL CLD INC DX REP OUTSB STI
You could also add some code here to test if the pallette is set correctly, for e.g.:
Code: Select all
mov bx,0xA000
xor di,di
mov es,bx
mov cx,8192
.l1: mov al,cl
stosb
loop .l1
.die: jmp .die
You've got no way of knowing if any of this worked. The BIOS "load sector" function should be retried up to 3 times before an error message is displayed. Also the BIOS load sector function doesn't work for multiple sectors unless you tell the BIOS about the geometry of the disk first (I think it's INT 0x13, AH = 0x18).PJ wrote:Code: Select all
mov ax,100h mov es,ax xor bx,bx mov ah,02h mov al,06h mov ch,03h mov cl,0ch mov dl,00h int 13h mov bx,0x0C00 mov ah,02h mov al,12h mov ch,04h mov cl,00h mov dl,00h int 13h
Cheers,
Brendan
For all things; perfection is, and will always remain, impossible to achieve in practice. However; by striving for perfection we create things that are as perfect as practically possible. Let the pursuit of perfection be our guide.
Re:[asm]boot + img
I have new light code. I know where is error. Error is in read sectors. I dont know why .
i will read sector 1 and save in 0100:0000 and save in A000:0000 from 0100:0000. This code is break down why?
Have you some time? If yes---> please write small code a'la this code.
ALL THX
i will read sector 1 and save in 0100:0000 and save in A000:0000 from 0100:0000. This code is break down why?
Code: Select all
[BITS 16]
[ORG 0000h]
jmp start
paleta db 0,0,0
;; still same palette stuff
db 1,1,1
start: mov ax,0013h
int 10h
mov ax,0x07C0
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax
mov ax,00h
mov ss,ax
mov sp,0xFFFF
MOV SI,paleta
MOV CX,99
MOV DX,03C8H
XOR AL,AL
CLI
OUT DX,AL
CLD
INC DX
REP OUTSB
STI
clc
ready: mov ah,0eh
mov al,41h
mov bl,01h
int 10h
mov ah,00h
mov dl,00h
int 13h
jc ready
mov ax,100h
mov es,ax
xor bx,bx
mov ah,0eh
mov al,01h
mov ch,00h
mov cl,01h
mov dl,00h
int 13h
mov ax,100h
xor bx,bx
mov ds,ax
mov si,bx
mov ax,0xA000
xor bx,bx
mov es,ax
mov di,bx
mov cx,200h
rep movsb
ret
TIMES 510-($-$$) DB 0
DW 0xAA55
Have you some time? If yes---> please write small code a'la this code.
ALL THX
- Pype.Clicker
- Member
- Posts: 5964
- Joined: Wed Oct 18, 2006 2:31 am
- Location: In a galaxy, far, far away
- Contact:
Re:[asm]boot + img
ekhmmmm... ???
If "driver" of floppy is ready --> code read sector ecd.
Please help of this code!! i dont know why this code is broken down
I KNOW!!!!!!!
code of read is error i dont know why in 100% reading sector is erroring
help me please
If "driver" of floppy is ready --> code read sector ecd.
Please help of this code!! i dont know why this code is broken down
I KNOW!!!!!!!
code of read is error i dont know why in 100% reading sector is erroring
help me please
- Pype.Clicker
- Member
- Posts: 5964
- Joined: Wed Oct 18, 2006 2:31 am
- Location: In a galaxy, far, far away
- Contact:
Re:[asm]boot + img
INT 10, AH=2
http://www.ctyme.com/intr/rb-0607.htmReturn:
CF set on error
Notes: Errors on a floppy may be due to the motor failing to spin up quickly enough; the read should be retried at least three times, resetting the disk with AH=00h between attempts.
Re:[asm]boot + img
Ok i have normal code
I have new problem:
If I read 1-18 is all ok, if I read 19 and up is error, why?
mov ch,00h mov ch,01h
mov cl,01h mov cl,01h
I have new problem:
If I read 1-18 is all ok, if I read 19 and up is error, why?
mov ch,00h mov ch,01h
mov cl,01h mov cl,01h
Code: Select all
[BITS 16]
[ORG 0000h]
jmp start
paleta db 0,0,0
... ; same stuff as initial post
db 1,1,1
start: mov ax,0013h
int 10h
mov ax,0x07C0
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax
mov ax,00h
mov ss,ax
mov sp,0xFFFF
MOV SI,paleta
MOV CX,99
MOV DX,03C8H
XOR AL,AL
CLI
OUT DX,AL
CLD
INC DX
REP OUTSB
STI
ready: clc
mov ah,0eh
mov al,41h
mov bl,01h
int 10h
mov ah,00h
mov dl,00h
int 13h
jc ready
clc
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,01h
mov ch,00h
mov cl,01h
mov dh,00h
mov dl,00h
int 13h
jc ready
mov ax,100h
xor bx,bx
mov ds,ax
mov si,bx
mov ax,0xA000
xor bx,bx
mov es,ax
mov di,bx
mov cx,200h
rep movsb
ret
TIMES 510-($-$$) DB 0
DW 0xAA55
Re:[asm]boot + img
Because sector 19 isn't on the 2nd cylinder, it's on the second head of the first cylinder.
For the sake of your own (And our) sanity can you please comment your code. Large expanses of uncommented assembly, with undescriptive labelling, won't motivate people to actually bother looking at the source to try and help you. It also won't be fun for you to plough through again a few months from now when it's no longer fresh in your mind.
For the sake of your own (And our) sanity can you please comment your code. Large expanses of uncommented assembly, with undescriptive labelling, won't motivate people to actually bother looking at the source to try and help you. It also won't be fun for you to plough through again a few months from now when it's no longer fresh in your mind.
Re:[asm]boot + img
OK this is my problem:
......
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,01h
mov ch,00h 0 track
mov cl,01h 1 sector
mov dh,00h
mov dl,00h
int 13h
...... ^-- This code of UP is ok, reading first sector of track 0
......
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,01h
mov ch,01h 1 track
mov cl,01h 1 sector
mov dh,00h
mov dl,00h
int 13h
.......
^-- This code of UP is broken down why? i will reading 19 sector->> first secotor of 1 track
......
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,01h
mov ch,00h 0 track
mov cl,01h 1 sector
mov dh,00h
mov dl,00h
int 13h
...... ^-- This code of UP is ok, reading first sector of track 0
......
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,01h
mov ch,01h 1 track
mov cl,01h 1 sector
mov dh,00h
mov dl,00h
int 13h
.......
^-- This code of UP is broken down why? i will reading 19 sector->> first secotor of 1 track
Re:[asm]boot + img
Terminology fix: the CH content is the cluster number. The combination of cluster * heads + head => track numberPJ wrote: OK this is my problem:
......
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,01h
mov ch,00h 0 track
mov cl,01h 1 sector
mov dh,00h
mov dl,00h
int 13h
...... ^-- This code of UP is ok, reading first sector of track 0
......
mov ax,100h
mov es,ax
xor bx,bx
mov ah,02h
mov al,01h
mov ch,01h 1 track
mov cl,01h 1 sector
mov dh,00h
mov dl,00h
int 13h
.......
^-- This code of UP is broken down why? i will reading 19 sector->> first secotor of 1 track
- Pype.Clicker
- Member
- Posts: 5964
- Joined: Wed Oct 18, 2006 2:31 am
- Location: In a galaxy, far, far away
- Contact:
Re:[asm]boot + img
okay, be a big boy, stop crying and start explaining ...PJ wrote: ekhm..
error
ok ok
HELP mEEEE!!
what do make you thing the second one is "broken" ? what do you expect the code to do and what does it do instead ? ...
Also, you must know that
- you may not request several sectors if the first and the last one of your request are not on the same 'track' (iirc, BIOS can deal with switching heads, but not moving heads to another 'cylinder')
- every PC considers sector N, head 0, track Y to be followed by sector 1, head 1, track Y and not sector 1, head 0, track Y+1
- when moving to another track, you're very likely to experience a few read errors as it'll need time for the heads to move and the BIOS may not compensate for this ...
- Pype.Clicker
- Member
- Posts: 5964
- Joined: Wed Oct 18, 2006 2:31 am
- Location: In a galaxy, far, far away
- Contact:
Re:[asm]boot + img
Since you're always restarting the whole process (init, read first track, read next track) on errors, wherever the error occured there's little chance the whole operation can complete.
consider the following:
ready:
RESET
(successful)
INT13 (read track 0, head 0)
(not yet ready -- e.g. spinning too slow)
RESET
(successful)
INT13 (track 0)
(successful)
INT13 (track 1)
(not yet ready -- e.g. still moving arm to track 1)
RESET
(successful)
INT13 (track 0)
(not yet ready -- e.g. moving arm back to track 0)
RESET
(successful)
INT13 (track 0)
(successful)
INT13 (track 1)
(not yet ready -- e.g. still moving arm to track 1)
RESET
(successful)
INT13 (track 0)
... etc ...
consider the following:
ready:
RESET
(successful)
INT13 (read track 0, head 0)
(not yet ready -- e.g. spinning too slow)
RESET
(successful)
INT13 (track 0)
(successful)
INT13 (track 1)
(not yet ready -- e.g. still moving arm to track 1)
RESET
(successful)
INT13 (track 0)
(not yet ready -- e.g. moving arm back to track 0)
RESET
(successful)
INT13 (track 0)
(successful)
INT13 (track 1)
(not yet ready -- e.g. still moving arm to track 1)
RESET
(successful)
INT13 (track 0)
... etc ...