Monday, May 30, 2011

Revision 9 released

This revision includes scripts for LFS-6.8 and BLFS-r8882. There have been a number of changes and a lot of bugfixes. Some highlights:
  • Added script for Xfce 4.8.
  • Gnome should now be able to build and run properly.
  • Added an interactive configuration utility which will run when you install a system. This will set up the default window manager and automatically configure your system to start in graphical mode (if you have X11 installed) and prompt you to set a root password.
  • Improved on the way log files are stored.
  • Added support for PRE-installation scripts.

Wednesday, May 11, 2011

Revision 8 released

LFScript 4 revision 8 has been released.

This is mostly a bugfix release. This revision includes scripts for LFS-6.8 and BLFS-r8879 (just like revision 7 did).

One new feature deserves a mention though; Whenever a specified URL in any script is no longer valid, LFScript will now automatically try to download that file from my new code repository (see my previous blog entry).

Tuesday, May 10, 2011

Mirror time

I've received a few reports about source code download problems and MD5 checksum failures.

MD5 issues
The MD5 failures are almost always for the LFS bootscripts and Udev configuration tarball. This issue is mostly my fault, as I placed the development URL for these sources in the scripts. The development sources are re-created daily by the LFS folks, thereby also changing the checksum daily. The next LFScript revision will reference the proper 6.8 download locations.

It's worth noting that whenever I fix something like this, you can download the fixed files from the development repository (http://www.wuala.com/marcelvdboer/Sync/lfscript-4.0). Also, if a bug report has been filed, it will be set to "Fix committed" indicating you can download it from that repository.

Source code repository
There are also people who don't like the fact that after a revision of LFScript has been released for some time, some source code packages are not downloaded automatically any more. This is due to the fact that some developers move or even remove source code from the web whenever a new version of their software is released. Though it seems easy enough to go to Google, type in the missing file name, then download it manually to the sources directory, people still complain about this.

To solve this issue, I'm now building a source code mirror of my own, and the next revision of LFScript will automatically try this repository if a primary URL is down. I didn't want to link to third party repositories because of the (remote) possibility it will increase their traffic too much. The repository will contain source code for scripts included in the most recent version of LFScript only.

The repository is accessible through http://lfscript.org/sources. You can use this link to verify the repository contains a required file (and then let me know if it doesn't, so I can fix it), but you should not download files manually from there. Use LFScript to download your files.

It's still under some construction, but the repository should be fully populated by the time the next revision of LFScript is released.

Saturday, May 7, 2011

Useless OS 1.2 - x86 assembly

This is a bit of a technical entry, which by the way has nothing to do with LFScript at all...

For one of my projects, I'm learning a bit of x86 assembly.

Some initial goals were:
- Print a string of text on the screen
- Be able to use all 16 colours
- Position the text cursor
- Do NOT use BIOS interrupts (because it may eventually have to run in protected mode)

I came up with this:

%define  CODE_BASE  0x07C0

;; 'UselessOS 1.2' a.k.a. 'Print some coloured text, position a cursor and quit'
;; Created: 2011-05-06/2011-05-07
;; By: Marcel van den Boer
;;
;; Released in the PUBLIC DOMAIN
;;
;; Build and run with:
;;   $ nasm -f bin -o colortext.bin colortext.asm
;;   $ dd if=/dev/zero of=colortext.img bs=2880 count=512
;;   $ dd status=noxfer conv=notrunc if=colortext.bin of=colortext.img
;;   $ qemu -fda colortext.img
;;
;; Resources:
;; - http://mikeos.berlios.de/write-your-own-os.html
;; - http://www.jamesmolloy.co.uk/tutorial_html/
;; - http://wiki.osdev.org/Memory_Map_%28x86%29
;; - http://www.tarleton.edu/computerscience/documents/CS%20380/ ...
;;          ... Labs/Lab%203%20-%20Kernel.pdf

; Color definitions
%define  BLACK    0x0
%define  BLUE     0x1
%define  GREEN    0x2
%define  CYAN     0x3
%define  RED      0x4
%define  MAGENTA  0x5
%define  YELLOW   0x6
%define  WHITE    0x7

; Color brightness
%define  NORMAL   0x0
%define  BRIGHT   0x8

; Video memory facts
%define  COLOR       (BACKGROUND << 4 | FOREGROUND)
%define  CURSOR      ((CURSOR_Y * COLUMNS) + CURSOR_X)
%define  VIDEO_BASE  0xB800
%define  COLUMNS     80
%define  ROWS        25

; Text to print
%define  MESSAGE  'Useless OS 1.2 loaded... Goodbye!'
%define  FOREGROUND  (YELLOW | BRIGHT)
%define  BACKGROUND  (BLUE   | BRIGHT)

; Where to place the cursor
%define  CURSOR_X  79
%define  CURSOR_Y  24

init:
    ; Note: This section marked 'init' is not required for the remaining code
    ;       It's just here for my own reference
    cli

    ; Set up stack
    mov ax, 0x07E0
    mov ss, ax
    mov esp, (0x0007FFFF - 0x00007E00)

cursor:
    ; Lower byte
    mov byte al, 0x0F
    mov word dx, 0x03D4
    out dx, al

    mov byte al, CURSOR
    mov word dx, 0x03D5
    out dx, al

    ; Upper byte
    mov byte al, 0x0E
    mov word dx, 0x03D4
    out dx, al

    mov byte al, CURSOR >> 8
    mov word dx, 0x03D5
    out dx, al

start:
    ; Initialize registers which will be modified later (pointers)
    mov word si, 0
    mov word di, MSG_BASE

    ; Initialze registers with non-changing data
    mov word ax, CODE_BASE
    mov word bx, VIDEO_BASE

    ; Set character color
    mov byte ch, COLOR

fetch:
    ; Fetches the next character
    mov word ds, ax     ; Align with code
    mov byte cl, [di]   ; Fetch character
    inc di              ; Increment character index

print:
    ; Prints the most recently loaded character
    mov word ds, bx     ; Align with video memory
    mov word [si], cx   ; Print character
    add si, 2           ; Increment video index

branch:
    ; Fetch the next character if the end of the string has not been reached
    cmp cl, 0
    jne fetch

    ; Otherwise fill the screen with the last (null) character
    cmp si, (COLUMNS * ROWS * 2)
    jl print

end:
    ; Finally, wait forever
    jmp $

data:
    MSG_BASE db MESSAGE, 0

padding:
    ; Required to be recognized as a boot sector
    times 510-($-$$) db 0
    dw 0xAA55


(It is has version number 1.2 because: "1.0" printed the string and cleared the screen, "1.1" added colour and "1.2" added cursor management. Though every version was made in the last two days.)

Enjoy.