diff --git a/22_day/Makefile b/22_day/Makefile index 3718ae8..0c48339 100644 --- a/22_day/Makefile +++ b/22_day/Makefile @@ -80,19 +80,6 @@ hello5.bim : hello5.obj Makefile hello5.hrb : hello5.bim Makefile $(BIM2HRB) hello5.bim hello5.hrb 0 -winhelo.bim : winhelo.obj a_nask.obj Makefile - $(OBJ2BIM) @$(RULEFILE) out:winhelo.bim stack:1k map:winhelo.map \ - winhelo.obj a_nask.obj - -winhelo.hrb : winhelo.bim Makefile - $(BIM2HRB) winhelo.bim winhelo.hrb 0 - -bug1.bim : bug1.obj Makefile - $(OBJ2BIM) @$(RULEFILE) out:bug1.bim map:bug1.map bug1.obj a_nask.obj - -bug1.hrb : bug1.bim Makefile - $(BIM2HRB) bug1.bim bug1.hrb 0 - bug2.bim : bug2.obj Makefile $(OBJ2BIM) @$(RULEFILE) out:bug2.bim map:bug2.map bug2.obj @@ -105,9 +92,23 @@ bug3.bim : bug3.obj Makefile bug3.hrb : bug3.bim Makefile $(BIM2HRB) bug3.bim bug3.hrb 0 +winhelo.bim : winhelo.obj a_nask.obj Makefile + $(OBJ2BIM) @$(RULEFILE) out:winhelo.bim stack:1k map:winhelo.map \ + winhelo.obj a_nask.obj + +winhelo.hrb : winhelo.bim Makefile + $(BIM2HRB) winhelo.bim winhelo.hrb 0 + +winhelo2.bim : winhelo2.obj a_nask.obj Makefile + $(OBJ2BIM) @$(RULEFILE) out:winhelo2.bim stack:1k map:winhelo2.map \ + winhelo2.obj a_nask.obj + +winhelo2.hrb : winhelo2.bim Makefile + $(BIM2HRB) winhelo2.bim winhelo2.hrb 0 + haribote.img : ipl10.bin haribote.sys Makefile \ - hello.hrb hello2.hrb a.hrb hello3.hrb bug1.hrb bug2.hrb bug3.hrb \ - hello4.hrb hello5.hrb winhelo.hrb + hello.hrb hello2.hrb a.hrb hello3.hrb hello4.hrb hello5.hrb \ + winhelo.hrb winhelo2.hrb $(EDIMG) imgin:../z_tools/fdimg0at.tek \ wbinimg src:ipl10.bin len:512 from:0 to:0 \ copy from:haribote.sys to:@: \ @@ -117,12 +118,10 @@ haribote.img : ipl10.bin haribote.sys Makefile \ copy from:hello2.hrb to:@: \ copy from:a.hrb to:@: \ copy from:hello3.hrb to:@: \ - copy from:bug1.hrb to:@: \ - copy from:bug2.hrb to:@: \ - copy from:bug3.hrb to:@: \ copy from:hello4.hrb to:@: \ copy from:hello5.hrb to:@: \ copy from:winhelo.hrb to:@: \ + copy from:winhelo2.hrb to:@: \ imgout:haribote.img # 其他指令 diff --git a/22_day/a_nask.nas b/22_day/a_nask.nas index d02e6ea..66b7bd9 100644 --- a/22_day/a_nask.nas +++ b/22_day/a_nask.nas @@ -7,6 +7,8 @@ GLOBAL _api_putstr0 GLOBAL _api_end GLOBAL _api_openwin + GLOBAL _api_putstrwin + GLOBAL _api_boxfilwin [SECTION .text] @@ -43,3 +45,41 @@ _api_openwin: ; int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char POP ESI POP EDI RET + +_api_putstrwin: ; void api_putstrwin(int win, int x, int y, int col, int len, char *str); + PUSH EDI + PUSH ESI + PUSH EBP + PUSH EBX + MOV EDX,6 + MOV EBX,[ESP+20] ; win + MOV ESI,[ESP+24] ; x + MOV EDI,[ESP+28] ; y + MOV EAX,[ESP+32] ; col + MOV ECX,[ESP+36] ; len + MOV EBP,[ESP+40] ; str + INT 0x40 + POP EBX + POP EBP + POP ESI + POP EDI + RET + +_api_boxfilwin: ; void api_boxfilwin(int win, int x0, int y0, int x1, int y1, int col); + PUSH EDI + PUSH ESI + PUSH EBP + PUSH EBX + MOV EDX,7 + MOV EBX,[ESP+20] ; win + MOV EAX,[ESP+24] ; x0 + MOV ECX,[ESP+28] ; y0 + MOV ESI,[ESP+32] ; x1 + MOV EDI,[ESP+36] ; y1 + MOV EBP,[ESP+40] ; col + INT 0x40 + POP EBX + POP EBP + POP ESI + POP EDI + RET diff --git a/22_day/bug1.c b/22_day/bug1.c deleted file mode 100644 index 1430edf..0000000 --- a/22_day/bug1.c +++ /dev/null @@ -1,13 +0,0 @@ -void api_putchar(int c); -void api_end(void); - -void HariMain(void){ - char a[100]; - a[10] = 'A'; /*这句当然没有问题*/ - api_putchar(a[10]); - a[102] = 'B'; /*这句就有问题了*/ - api_putchar(a[102]); - a[123] = 'C'; /*这句也有问题了*/ - api_putchar(a[123]); - api_end(); -} \ No newline at end of file diff --git a/22_day/console.c b/22_day/console.c index f3eb8be..b2ff811 100644 --- a/22_day/console.c +++ b/22_day/console.c @@ -336,6 +336,14 @@ int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int sheet_slide(sht, 100, 50); sheet_updown(sht, 3); /*背景层高度3位于task_a之上*/ reg[7] = (int) sht; + } else if (edx == 6) { + sht = (struct SHEET *) ebx; + putfonts8_asc(sht->buf, sht->bxsize, esi, edi, eax, (char *) ebp + ds_base); + sheet_refresh(sht, esi, edi, esi + ecx * 8, edi + 16); + } else if (edx == 7) { + sht = (struct SHEET *) ebx; + boxfill8(sht->buf, sht->bxsize, ebp, eax, ecx, esi, edi); + sheet_refresh(sht, eax, ecx, esi + 1, edi + 1); } return 0; } diff --git a/22_day/winhelo2.c b/22_day/winhelo2.c new file mode 100644 index 0000000..f00b007 --- /dev/null +++ b/22_day/winhelo2.c @@ -0,0 +1,15 @@ +int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char *title); +void api_putstrwin(int win, int x, int y, int col, int len, char *str); +void api_boxfilwin(int win, int x0, int y0, int x1, int y1, int col); +void api_end(void); + +char buf[150 * 50]; + +void HariMain(void) +{ + int win; + win = api_openwin(buf, 150, 50, -1, "hello"); + api_boxfilwin(win, 8, 36, 141, 43, 3); /*黄色*/ + api_putstrwin(win, 28, 28, 0 /*黑色*/, 12, "hello, world"); + api_end(); +}