mirror of
https://github.com/yourtion/30dayMakeOS.git
synced 2026-02-05 19:13:21 +08:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
984b2886d0 | ||
|
|
a381fbedc3 | ||
|
|
4054ce43ab |
@@ -30,6 +30,8 @@ void asm_inthandler27(void);
|
||||
void asm_inthandler2c(void);
|
||||
unsigned int memtest_sub(unsigned int start, unsigned int end);
|
||||
void farjmp(int eip, int cs);
|
||||
void farcall(int eip, int cs);
|
||||
void asm_cons_putchar(void);
|
||||
|
||||
/* fifo.c */
|
||||
struct FIFO32 {
|
||||
|
||||
@@ -16,6 +16,7 @@ void console_task(struct SHEET *sheet, unsigned int memtotal)
|
||||
cons.cur_x = 8;
|
||||
cons.cur_y = 28;
|
||||
cons.cur_c = -1;
|
||||
*((int *) 0x0fec) = (int) &cons;
|
||||
|
||||
fifo32_init(&task->fifo, 128, fifobuf, task);
|
||||
timer = timer_alloc();
|
||||
@@ -255,7 +256,7 @@ void cmd_hlt(struct CONSOLE *cons, int *fat)
|
||||
p = (char *) memman_alloc_4k(memman, finfo->size);
|
||||
file_loadfile(finfo->clustno, finfo->size, p, fat, (char *) (ADR_DISKIMG + 0x003e00));
|
||||
set_segmdesc(gdt + 1003, finfo->size - 1, (int) p, AR_CODE32_ER);
|
||||
farjmp(0, 1003 * 8);
|
||||
farcall(0, 1003 * 8);
|
||||
memman_free_4k(memman, (int) p, finfo->size);
|
||||
} else {
|
||||
/*没有找到文件的情况*/
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
[BITS 32]
|
||||
CLI
|
||||
fin:
|
||||
HLT
|
||||
JMP fin
|
||||
MOV AL,'h'
|
||||
CALL 2*8:0xbe8
|
||||
MOV AL,'e'
|
||||
CALL 2*8:0xbe8
|
||||
MOV AL,'l'
|
||||
CALL 2*8:0xbe8
|
||||
MOV AL,'l'
|
||||
CALL 2*8:0xbe8
|
||||
MOV AL,'o'
|
||||
CALL 2*8:0xbe8
|
||||
RETF
|
||||
|
||||
@@ -16,9 +16,11 @@
|
||||
GLOBAL _asm_inthandler20, _asm_inthandler21
|
||||
GLOBAL _asm_inthandler27, _asm_inthandler2c
|
||||
GLOBAL _memtest_sub
|
||||
GLOBAL _farjmp
|
||||
GLOBAL _farjmp, _farcall
|
||||
GLOBAL _asm_cons_putchar
|
||||
EXTERN _inthandler20, _inthandler21
|
||||
EXTERN _inthandler27, _inthandler2c
|
||||
EXTERN _cons_putchar
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
@@ -209,4 +211,17 @@ mts_fin:
|
||||
|
||||
_farjmp: ; void farjmp(int eip, int cs);
|
||||
JMP FAR [ESP+4] ; eip, cs
|
||||
RET
|
||||
RET
|
||||
|
||||
_farcall: ; void farcall(int eip, int cs);
|
||||
CALL FAR [ESP+4] ; eip, cs
|
||||
RET
|
||||
|
||||
_asm_cons_putchar:
|
||||
PUSH 1
|
||||
AND EAX,0xff ; 将AH和EAX的高位置0,将EAX置为已存入字符编码的状态
|
||||
PUSH EAX
|
||||
PUSH DWORD [0x0fec] ; 读取内存并PUSH该值
|
||||
CALL _cons_putchar
|
||||
ADD ESP,12 ; 将栈中的数据丢弃
|
||||
RETF
|
||||
|
||||
Reference in New Issue
Block a user