flat assembler
Message board for the users of flat assembler.

Index > OS Construction > Booting from CD

Author
Thread Post new topic Reply to topic
flash



Joined: 11 Mar 2006
Posts: 55
Location: Cuba
flash 12 Dec 2010, 04:40
Hi you all!!
I am using cod3b453 iso code to create a bootable CD for a very simple real mode code.
Writing to VRAM works fine at Virtual Box, but the problems came when I try to read the keyboard.
Moreover, when I boot a real PC then nothing happens except for stranges characters.
The code for keyboard works ok at DOS program. I take the idea from DexOS and Linux codes. What can be happening?? What I am loosing??
This is my boot.asm file:
Code:
org 0x7C00
                cli
                jmp     0:@f
            @@: mov     SI,1982
                call    LocateFBText
                mov     SI,msg
                mov     BL,00001111b
                call    Print

            @@: call    KeyPress
                cmp     AL,1
                jne     @b

                xor     SI,SI
                call    LocateFBText
                mov     SI,msgi
                mov     BL,00001001b
                call    Print

                mov     SI,320
                call    LocateFBText
                call    PutCursor

            @@: call    PutCursor
                call    ReadKey
                call    PutChar
                jmp     @b

;
; Subrutinas
;
  LocateFBText: cmp     SI,4000
                ja      @f
                and     SI,0FFFEh
                mov     [textfbpos],SI
                ret
            @@: mov     [textfbpos],4000
                ret

         Print: mov     AX,0B800h
                mov     ES,AX
            @@: mov     AL,[SI]
                cmp     AL,0
                je      @f
                mov     DI,[textfbpos]
                mov     [ES:DI],AL
                mov     [ES:DI+1],BL
                inc     SI
                add     DI,2
                jmp     @b
            @@: mov     [textfbpos],DI
                ret

     PutCursor: push    0B800h
                pop     ES
                mov     SI,[textfbpos]
                mov     [ES:SI],byte 219
                ret

      KeyPress: cli
                xor     CX,CX
            @@: in      AL,64h
                test    AL,1
                loopz   @b
                in      AL,60h
                sti
                ret

       ReadKey: call    KeyPress
                cmp     AL,42                   ;Tecla Shift izquierda presionada
                jne     @f
                mov     [shiftstatus],0FFh
                jmp     ReadKey
            @@: cmp     AL,42+128               ;Tecla Shift izquierda liberada
                jne     @f
                mov     [shiftstatus],0
                jmp     ReadKey
            @@: cmp     AL,54                   ;Tecla Shift derecha presionada
                jne     @f
                mov     [shiftstatus],0FFh
                jmp     ReadKey
            @@: cmp     AL,54+128               ;Tecla Shift derecha liberada
                jne     @f
                mov     [shiftstatus],0
                jmp     ReadKey
            @@: cmp     AL,58+128               ;Tecla CapsLock activada
                jne     @f
                not     [capsstatus]
                jmp     ReadKey
            @@: cmp     AL,56                   ;Evitar eco de la tecla Alt
                jne     @f
                jmp     ReadKey
            @@: cmp     AL,58                   ;Evitar eco de la tecla CapsLock
                jne     @f
                jmp     ReadKey
            @@: cmp     AL,29                   ;Evitar eco de la tecla Control izquierda
                jne     @f
                jmp     ReadKey
            @@: cmp     AL,128                  ;Evitar eco de las teclas liberadas
                jb      @f
                jmp     ReadKey

            @@: xor     AH,AH
                mov     DI,AX
                cmp     [shiftstatus],0FFh
                jne     @f
                mov     AL,[DI+shiftkeymap]
                ret
            @@: cmp     [capsstatus],0FFh
                jne     @f
                mov     AL,[DI+capskeymap]
                ret
            @@: mov     AL,[DI+normalkeymap]
                ret

       PutChar: push    0B800h
                pop     ES
                mov     SI,[textfbpos]
                cmp     AL,8                    ;Ejecutar BackSpace
                jne     @f
                cmp     SI,0
                jne     PutCharBackSpc
                ret
PutCharBackSpc: mov     [ES:SI],byte 32         ;Borrar el cursor
                sub     SI,2
                mov     [ES:SI],byte 32         ;Borrar el caracter anterior
                mov     [textfbpos],SI
                ret
            @@: cmp     AL,9                    ;Ejecutar Tab
                jne     @f
                mov     CX,6
    PutCharTab: mov     [ES:SI],byte 32         ;Rellenar con espacios
                add     SI,2
                loop    PutCharTab
                mov     [textfbpos],SI
                ret
            @@: cmp     AL,10                   ;Ejecutar Enter
                jne     @f
                mov     [ES:SI],byte 0          ;Marcar el cambio de lĂ­nea
                call    NextFrameBufferLine
                mov     [textfbpos],SI
                ret
            @@: mov     [ES:SI],AL
                add     SI,2
                mov     [textfbpos],SI
                ret

NextFrameBufferLine:
                mov     SI,160
                mov     AX,[textfbpos]
                xor     DX,DX
                div     SI
                sub     SI,DX
                mov     AX,[textfbpos]
                add     SI,AX
                ret

 PreviousFrameBufferPos:
                push    0B800h
                pop     ES
                mov     SI,[textfbpos]
            @@: sub     SI,2
                mov     AL,[ES:SI]
                cmp     AL,32
                jne     @f
                jmp     @b
            @@: cmp     AL,0
                je      @f
                mov     SI,[textfbpos]
                sub     SI,2
                ret
            @@: add     SI,2
                ret

        msg     db 'Bienvenido a CDOS!',0
        msgi    db 'Puede usar el teclado',0
      textfbpos dw 0
    shiftstatus DB 0
     capsstatus DB 0
  normalkeymap: DB 0
                DB 27,'1234567890-=',8
                DB 9,'qwertyuiop[]',10
                DB 0,'asdfghjkl;',39,96,0,'\'
                DB 'zxcvbnm,./',0,'*',0,' '
                DB 0,'2345678901',0,'3789-456+1230.'
                DB 172 DUP(0)

   shiftkeymap: DB 0
                DB 27,'!@#$%^&*()_+',8
                DB 9,'QWERTYUIOP{}',10
                DB 0,'ASDFGHJKL:"~',0,'|'
                DB 'ZXCVBNM<>?',0,'*',0,' '
                DB 0,'2345678901',0,'3789-456+1230.'
                DB 172 DUP(0)

    capskeymap: DB 0
                DB 27,'1234567890-=',8
                DB 9,'QWERTYUIOP[]',10
                DB 0,'ASDFGHJKL;',39,96,0,'\'
                DB 'ZXCVBNM,./',0,'*',0,' '
                DB 0,'2345678901',0,'3789-456+1230.'
                DB 172 DUP(0)

        times (0x7C00 + DISK_SIZE_SECTOR - $ - 2) db 0
                dw 0xAA55
    


Thank's!

_________________
i don't hate goto
Post 12 Dec 2010, 04:40
View user's profile Send private message Reply with quote
flash



Joined: 11 Mar 2006
Posts: 55
Location: Cuba
flash 19 Mar 2011, 17:06
Well... Sad Finally the problem was so simple.... the KeyPress code. More exactly the loopz instruction. With this changes the code works fine at VirtualBox:
Code:
      KeyPress: cli
            @@: in      AL,64h
                test    AL,1
                jz   @b
                in      AL,60h
                sti
                ret 
    

But when tested over real PC... aaaghh!! the video is completely crazy!!! I am shocked... this is serious. The screen is full of flashing white chars over gray background. Somebody have any experience testing code over real PC??
Post 19 Mar 2011, 17:06
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.

Website powered by rwasa.