diff --git a/Makefile b/Makefile index ad0ec47..0a6c2ae 100644 --- a/Makefile +++ b/Makefile @@ -6,11 +6,15 @@ PYTHON = python3 all: ponydos.img -FS_FILES = bg.bin shell.bin +FS_FILES = wallpaper.bin shell.bin ponydos.img: ponydos.bin $(FS_FILES) $(PYTHON) assemble_floppy.py $@ ponydos.bin $(FS_FILES) +ponydos.bin: ponydos.inc + +shell.bin: ponydos.inc + .asm.bin: $(NASM) -fbin -o $@ $< diff --git a/debug.inc b/debug.inc new file mode 100644 index 0000000..f7be956 --- /dev/null +++ b/debug.inc @@ -0,0 +1,39 @@ +hexprint16: + xchg ah, al + call hexprint8 + xchg ah, al + +hexprint8: + push ax + push cx + mov cl, 4 + shr al, cl + call hexprint4 + pop cx + pop ax + +hexprint4: + push ax + and al, 0xf + cmp al, 10 + jb .digit09 + + add al, 'a' - '0' - 10 + + .digit09: + add al, '0' + mov ah, 0x0e + int 0x10 + pop ax + ret + +hang: + hlt + jmp hang + +wait_key: + push ax + xor ah, ah + int 0x16 + pop ax + ret diff --git a/ponydos.asm b/ponydos.asm index 6c41154..09647b6 100644 --- a/ponydos.asm +++ b/ponydos.asm @@ -1,3 +1,5 @@ +%include "ponydos.inc" + cpu 286 bits 16 @@ -6,13 +8,20 @@ org 0x7c00 COLUMNS equ 80 ROWS equ 25 -WALLPAPER equ 0x500 - DIRENTS equ 0x2000 DIRENT_SIZE equ 32 FILE_MAX_SIZE equ 128 jmp 0:start + +; Thunks for application programs to use +; 0x7c05 +call open_file +retf +; 0x7c09 +call read_sectors +retf + start: cld @@ -64,13 +73,6 @@ initialize_mouse: .done: -load_wallpaper: - mov si, wallpaper_name - call open_file - mov bx, WALLPAPER - call read_sectors - ; TODO: error management? Surely this works... - load_shell: push word 0x1000 pop es @@ -78,7 +80,9 @@ load_shell: call open_file xor bx, bx call read_sectors + ; TODO: error management? Surely this works... + xor ax, ax ; WM_INITIALIZE call 0x1000:0 initialize_screen: @@ -124,7 +128,7 @@ mainloop: draw_wallpaper: pusha - mov si, WALLPAPER + mov si, GLOBAL_WALLPAPER xor di, di mov cx, 80*25 rep movsw @@ -227,8 +231,7 @@ modify_sector: ; Filesystem ; ------------------------------------------------------------------ -wallpaper_name: db 'bg.bin', 0 -shell_name: db 'shell.bin', 0 +shell_name db 'shell.bin', 0 ; in: ; ds:si = file name @@ -387,44 +390,6 @@ mouse_handler: popa retf -; ------------------------------------------------------------------ -; Debug routines -; ------------------------------------------------------------------ - -%if 0 -hexprint16: - xchg ah, al - call hexprint8 - xchg ah, al - -hexprint8: - push ax - push cx - shr al, 4 - call hexprint4 - pop cx - pop ax - -hexprint4: - push ax - and al, 0xf - cmp al, 10 - jb .digit09 - - add al, 'a' - '0' - 10 - - .digit09: - add al, '0' - mov ah, 0x0e - int 0x10 - pop ax - ret - -hang: - hlt - jmp hang -%endif - ; ------------------------------------------------------------------ ; Padding and boot sector signature ; ------------------------------------------------------------------ diff --git a/ponydos.inc b/ponydos.inc new file mode 100644 index 0000000..5273276 --- /dev/null +++ b/ponydos.inc @@ -0,0 +1,8 @@ +PONYDOS_SEG equ 0 + +SYS_OPEN_FILE equ 0x7c05 +SYS_READ_SECTORS equ 0x7c09 + +GLOBAL_WALLPAPER equ 0x500 + +WM_INITIALIZE equ 0 diff --git a/shell.asm b/shell.asm index dfd51d1..ca0f379 100644 --- a/shell.asm +++ b/shell.asm @@ -1,2 +1,52 @@ +%include "ponydos.inc" + +cpu 8086 +bits 16 + + org 0 -retf + +process_event: + push ax + push bx + push cx + push dx + push si + push di + push bp + push ds + push es + + mov bp, cs + mov ds, bp + mov es, bp + + cmp ax, WM_INITIALIZE + jne .not_initialize + call initialize + .not_initialize: + + pop es + pop ds + pop bp + pop di + pop si + pop dx + pop cx + pop bx + pop ax + retf + +initialize: + ; Set wallpaper + mov si, wallpaper_name + call PONYDOS_SEG:SYS_OPEN_FILE + + mov bp, PONYDOS_SEG + mov es, bp + mov bx, GLOBAL_WALLPAPER + call PONYDOS_SEG:SYS_READ_SECTORS + + ret + +wallpaper_name db 'wallpaper.bin', 0 diff --git a/bg.ansi b/wallpaper.ansi similarity index 100% rename from bg.ansi rename to wallpaper.ansi