First post, by 32768
I'm beginning to learn how to make BIOS extensions for PC, while I had some minor success
All that was made writing each individual character, something like:
mov ah,0Eh
mov al,'2'
mov bh,vpage
int 10h
mov ah,0Eh
mov al,'1'
mov bh,vpage
int 10h
...
But is not really the way to go, on even simple messages will fillup EEPROM like nothing, so I tried making like a pointer
msg db 'Assembled by xxxxx xxxxxxxx - 2018'
mov dx,0
mov si,offset msg << I think here is the problem
loop:
mov ah,0Eh
mov al,[si] << I think here is the problem
mov bh,0
int 10h
inc si
inc dx
cmp dx,33
jbe loop ;jump if low or equal
The result is all blank, even tho same code made for DOS is working prerfectly
to me seems that ES/DS/SI? is not initialized properly when I'm in BIOS extension, normaly I made a noob debugging program to see ES and DS what values hold during my program
...
msg db 'Assembled by xxxxx xxxxxxxx - 2018'
...
mov ah,0Fh ;get video mode
int 10h
mov vpage,bh
push ds
push si
mov dx,ES ; to see where ES is
mov cx,DS ; to see where DS is
mov si, offset [msg]
mov ah,0Eh ;dh first 8 bit from ES
mov al,dh
mov bh,vpage
int 10h
mov ah,0Eh ;dl last 8 bit from ES
mov al,dl
mov bh,vpage
int 10h
mov ah,0Eh
mov al,219 ; a "space"
mov bh,vpage
int 10h
mov ah,0Eh ; ch first 8 bit from DS
mov al,ch
mov bh,vpage
int 10h
mov ah,0Eh ; cl last 8 bit from DS
mov al,cl
mov bh,vpage
int 10h
mov ah,0Eh
mov al,219
mov bh,vpage
int 10h
mov ah,0Eh ;[SI]
mov al,[si]
mov bh,vpage
int 10h
mov ah,0Eh
mov al,219 ; a "space"
mov bh,vpage
int 10h
Result is thihs:
my bios extension is set via jumpers at D000
apparently ES is at D000, DS at 0040, and SI at 0
I think I tried every possible combination of
mov ah,0Eh
mov al,ES:DS / ES:[DS] / DS:SI / DS:[SI] / ES:[DS+SI]
mov bh,0
int 10h
All I get same behavior like in the second picture, no matter of combination I put in AL register. Basicaly I wonder what I dont see, even is in front of my eyes?
inb4: Also please dont tell about INT 21h, 09h.... is not about that