fixed putch/writestring
This commit is contained in:
parent
4e8b6c79a5
commit
dcf67075e5
10 changed files with 1984 additions and 697 deletions
|
|
@ -1,38 +0,0 @@
|
|||
|
||||
|
||||
%define CURSOR_W 16
|
||||
%define CURSOR_H 16
|
||||
|
||||
mouse_arrow:
|
||||
dw 1001111111111111b ; 0x9FFF
|
||||
dw 1000111111111111b ; 0x8FFF
|
||||
dw 1000011111111111b ; 0x87FF
|
||||
dw 1000001111111111b ; 0x83FF
|
||||
dw 1000000111111111b ; 0x81FF
|
||||
dw 1000000011111111b ; 0x80FF
|
||||
dw 1000000001111111b ; 0x807F
|
||||
dw 1000000000111111b ; 0x803F
|
||||
dw 1000000000011111b ; 0x801F
|
||||
dw 1000000000001111b ; 0x800F
|
||||
dw 1000000011111111b ; 0x80FF
|
||||
dw 1000100001111111b ; 0x887F
|
||||
dw 1001100001111111b ; 0x987F
|
||||
dw 1111110000111111b ; 0xFC3F
|
||||
dw 1111110000111111b ; 0xFC3F
|
||||
dw 1111111000111111b ; 0xFE3F
|
||||
dw 0000000000000000b ; 0x0000
|
||||
dw 0010000000000000b ; 0x2000
|
||||
dw 0011000000000000b ; 0x3000
|
||||
dw 0011100000000000b ; 0x3800
|
||||
dw 0011110000000000b ; 0x3C00
|
||||
dw 0011111000000000b ; 0x3E00
|
||||
dw 0011111100000000b ; 0x3F00
|
||||
dw 0011111110000000b ; 0x3F80
|
||||
dw 0011111111000000b ; 0x3FC0
|
||||
dw 0011111000000000b ; 0x3E00
|
||||
dw 0011011000000000b ; 0x3600
|
||||
dw 0010001100000000b ; 0x2300
|
||||
dw 0000001100000000b ; 0x0300
|
||||
dw 0000000110000000b ; 0x0180
|
||||
dw 0000000110000000b ; 0x0180
|
||||
dw 0000000000000000b ; 0x0000
|
||||
|
|
@ -20,78 +20,6 @@
|
|||
;
|
||||
; =============================================================================
|
||||
|
||||
%define MEM_SEG_DEB 0x0800 ; 0x0800:0000 = 0x8000 (32KB) évite IVT/BDA + stack 7C00
|
||||
%define MEM_SEG_END 0xA000 ; 0xA000:0000 = 0xA0000 (début zone vidéo)
|
||||
%define MEM_SEG_STEP 0x0040 ; 1KB = 0x400 bytes = 0x40 paragraphs
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Détection RAM conventionnelle
|
||||
; Teste la RAM de MEM_SEG_DEB -> MEM_SEG_END (0xA000, 640KB), par pas de 1KB.
|
||||
; Méthode: sauvegarde 1 mot, écrit 2 patterns, relit, restaure.
|
||||
;
|
||||
; Résultats:
|
||||
; AX = taille détectée en Ko (KB) à partir de 0 jusqu’au “top conventionnel”
|
||||
; DX = top_segment (segment du premier Ko NON valide) (optionnel)
|
||||
;
|
||||
; Précautions:
|
||||
; - Ne testez PAS une zone où se trouve votre pile / variables.
|
||||
; - Si votre pile est à 0000:7C00 (phys 0x7C00), commencez au moins à 0x0800.
|
||||
; - Ne testez pas au-delà de MEM_SEG_END (0xA000: début VGA/vidéo).
|
||||
; ---------------------------------------------------------------------------
|
||||
ram_setup:
|
||||
xor ax, ax ; AX = compteur KB trouvés
|
||||
mov dx, MEM_SEG_DEB ; DX = segment courant testé
|
||||
mov cx, MEM_SEG_END ; CX = segment fin (exclu)
|
||||
xor di, di ; tester au début du bloc 1KB: ES:0000
|
||||
|
||||
.loop_seg:
|
||||
cmp dx, cx
|
||||
jae .done
|
||||
mov es, dx
|
||||
|
||||
; sauvegarder le mot existant
|
||||
mov bx, [es:di]
|
||||
|
||||
; pattern 1
|
||||
mov word [es:di], 0x55AA
|
||||
cmp word [es:di], 0x55AA
|
||||
jne .fail_restore
|
||||
|
||||
; pattern 2 (inverse)
|
||||
mov word [es:di], 0xAA55
|
||||
cmp word [es:di], 0xAA55
|
||||
jne .fail_restore
|
||||
|
||||
; restaurer
|
||||
mov [es:di], bx
|
||||
|
||||
; OK: avancer d’1KB
|
||||
inc ax ; +1KB valide
|
||||
add dx, MEM_SEG_STEP
|
||||
jmp .loop_seg
|
||||
|
||||
.fail_restore:
|
||||
; restaurer avant de sortir
|
||||
mov [es:di], bx
|
||||
|
||||
.done:
|
||||
; AX contient le nb de KB valides *à partir de MEM_SEG_DEB*.
|
||||
; Si vous voulez une taille “depuis 0KB”, ajoutez MEM_SEG_DEB*16/1024 = MEM_SEG_DEB/64.
|
||||
;
|
||||
; base_kb = MEM_SEG_DEB / 0x0040 (car 1KB = 0x40 segments)
|
||||
mov bx, MEM_SEG_DEB
|
||||
shr bx, 6 ; /64 = /0x40 => KB de base
|
||||
add ax, bx ; AX = taille conventionnelle totale en KB (approx. 0..640)
|
||||
; DX = segment du premier bloc NON valide (top)
|
||||
; DX est déjà positionné (segment courant)
|
||||
|
||||
; stocker l'information dans le BDA
|
||||
mov bx, BDA_SEGMENT
|
||||
mov ds, bx
|
||||
mov [BDA_INFO_MEM_SIZE], ax
|
||||
mov [BDA_INFO_MEM_SEG], dx
|
||||
|
||||
ret
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Détection les ROM supplementaires
|
||||
|
|
@ -147,7 +75,6 @@ setup_check_vga:
|
|||
.init_ok:
|
||||
ret
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; IVT install (8088, mode réel) - remplit les 256 vecteurs avec un handler IRET
|
||||
; ---------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Reference in a new issue